C语言之有序序列合并(详解)

牛客网中有这样一道题4390cf75527b4419a3f1e29cc5de81d7.png

分析题干,要求我们的是第一行的第一个数字输入第二行的数列的数字个数, 第二个数字输入第三行的数列的数字个数,且第二行和第三行的数列都是升序排列的。要求我们输出一行长度为n+m的升序数列,将第二行和第三行的数列重新排列并升序组合。

接下来就来分步来解决这个问题吧!!

1⃣️首先要定义m和n,分别用于输入第二行和第三行的数字的个数,再定义一个数组,用于输出一个升序数列,再定义一个变量flag,用于第二行和第三行的交换排列,即实现数组交换。

e65a096f984a4c8ab5b813dcf0f5d9d4.png

2⃣️利用scanf函数 进行输入,即输出第二行和第三行的数字个数

880d9cd2fc614140be34ada7928b0f03.png

3⃣️接下来定义一个变量i,进行第二和第三行升序数列的输入,这样直接把两个数组中的数据,接收到一个数组中,我们可以写成:

5ec8f4bcc0854c868c8cd2ef47c667ec.png

4⃣️在3⃣️的基础上,我们再定义一个变量j,用于进行第三行升序数列的输入,并进行数组交换,这里的j就要 < m + n - i,因为总共只有m + n。arr[j]和arr[j+1]是arr数组中两个不同的元素,这里判断如果j下标的元素大于j + 1,就他俩实现交换,使得他们是升序,借助flag这个临时变量,先把arr[j]的值存到flag中,这样flag和arr[j]是相同的,再将arr[j + 1]赋值给arr[j],这时arr[j]的值已经是arr[j + 1]了,那么原来arr[j]的值在flag,所以将flag的值赋值给了arr[j + 1],这样就实现了交换,我们通常叫做"冒泡排序" ,所以我们可以写成:

16600b04818045038bcdc6ded99e9cbe.png

 

5⃣️处理完这些后,我们就基本完成了这个题目的主要部分,接下来就是打印输出后到结果,这个就很简单啦:

23c7be1e32ea408381e0606d48aa5cee.png 



 整个题目的思路就在上方完整的解释完毕,接下来看一下完整的代码吧!

d778be6696ad45e89e59c392afde1134.png

dd68c6a599ae4a889188f089346dabad.png 

OK,本次的题目就到此为止,咱们下期见!! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七分七分_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值