C语言,有两个字符串 s1, s2,每一个字符串可以取出 k 个字符。 你可以用任意顺序将这 2 × k 个字符拼接在一起,得到新字符串 s3。 请你输出能得到的字典序最小的 s3。 Input 输入...

给定两个字符串s1和s2以及整数k,需要构造字典序最小的新字符串s3,方法是分别从s1和s2中取出k个字符并自由排列。策略是始终选择当前较小的字符放入s3,直至k个字符取完,然后将剩余字符依次添加到s3末尾。
摘要由CSDN通过智能技术生成

题意是这样的:有两个字符串 s1 和 s2,你可以从两个字符串中各取出 k 个字符,将这 2 × k 个字符按任意顺序组合在一起,得到一个新的字符串 s3。你的任务是求出字典序最小的 s3。

解决这道题的思路就是比较 s1 和 s2 中前 k 个字符的大小,然后将小的那个字符串的字符放在前面,大的字符串的字符放在后面。

具体实现方法如下:

  1. 初始化变量 i 和 j,分别表示 s1 和 s2 中取字符的位置。

  2. 对于 s1 中的第 i 个字符和 s2 中的第 j 个字符,比较它们的大小。如果 s1[i] < s2[j],就将 s1[i] 放在 s3 中,i 加 1;否则,将 s2[j] 放在 s3 中,j 加 1。

  3. 当 i=k 或者 j=k 时,跳出循环。

  4. 将 s1 中剩余的字符放在 s3 后面。

  5. 将 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[

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值