题解 | #有序序列合并#
有序序列合并
https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n, m;
int arr1[1000] = { 0 };//用包含 1000 个整数的数组初始化第一个升序序列
int arr2[1000] = { 0 };//用包含 1000 个整数的数组初始化第二个升序序列
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++) {//输入第一个升序序列数组
scanf("%d", &arr1[i]);
}
for (int i = 0; i < m; i++){//输入第二个升序序列数组
scanf("%d", &arr2[i]);
}
int a = 0;
int b = 0;
//每次打印1个数,共n+m个数,于是用for循环打印n+m次
for (int i = 0; i < n + m; i++)
{
//当第一个升序数组和第二个升序数组里还有数没用完时,比较大小并打印
//(因为包含 1000 个整数的数组在第n/m个数后会变为零,所以要判断a是否小于n-1)
if ((a <= (n-1)) && (b <= (m-1))){
if(arr1[a] < arr2[b]){
printf("%d ", arr1[a]);
a++;
}
else{
printf("%d ", arr2[b]);
b++;
}
}
//当第一个升序数组用完,第二个升序数组里没用完时,打印第二个升序数组
else if((a > (n-1)) && (b <= (m-1))) {
printf("%d ", arr2[b]);
b++;
}
else if ((a <= (n-1)) && (b > (m-1))) {
printf("%d ", arr1[a]);
a++;
}
}
return 0;
}
//如果看不懂就用编译软件调试并监视看一下过程
查看7道真题和解析