题意是这样的:有两个字符串 s1 和 s2,你可以从两个字符串中各取出 k 个字符,将这 2 × k 个字符按任意顺序组合在一起,得到一个新的字符串 s3。你的任务是求出字典序最小的 s3。
解决这道题的思路就是比较 s1 和 s2 中前 k 个字符的大小,然后将小的那个字符串的字符放在前面,大的字符串的字符放在后面。
具体实现方法如下:
初始化变量 i 和 j,分别表示 s1 和 s2 中取字符的位置。
对于 s1 中的第 i 个字符和 s2 中的第 j 个字符,比较它们的大小。如果 s1[i] < s2[j],就将 s1[i] 放在 s3 中,i 加 1;否则,将 s2[j] 放在 s3 中,j 加 1。
当 i=k 或者 j=k 时,跳出循环。
将 s1 中剩余的字符放在 s3 后面。
将 s2 中剩余的字符放在 s3 后面。
代码实现如下:
``` #include #include
using namespace std;
const int N = 1e3 + 5;
int k; string s1, s2;
int main() { cin >> s1 >> s2 >> k; int i = 0, j = 0; while (i < k && j < k) { if (s1[i] < s2[j]) { cout << s1[i]; i++; } else { cout << s2[