题目描述
【问题描述】编写一个程序,将两个元素从小到大有序的一维数组归并成一个有序的一维数组。数组大小为20,最多允许输入的数的个数为10。
【输入形式】用户在第一行输入第一个有序数组的元素数目,以回车结束此输入。然后在第二行按照刚才输入的元素数目依次输入数组元素,中间用空格分隔,最后用回车结束输入。第三行和第四行只需重复刚才的步骤,将第二个有序数组也输入即可。输入时候一定是有序输入的,即数组元素已经按照从小到大顺序排列。
【输出形式】程序将两个有序一维数组合并为一个有序数组并按照从小到大顺序输出。每个元素输出时用“#”号分隔。
注:该题目不考虑数组空间浪费或者溢出不够的情况,可也要求输入数据时,一定要有序输入。
【样例输入】
6
2 5 8 11 20 35
4
1 6 15 60
【样例输出】1#2#5#6#8#11#15#20#35#60#(“#”为空格)
解题思路
由题意可知两个数组有序,那么定义变量分别为它们的初始下标,然后比较大小将较小的添加到新数组里面,最后将两数组中未添加的添加到新数组中,这里注意操作细节即可
源代码
#define _CRT_SECURE_NO_WARNINGS 1
//#pragma warning(disable:6031)
#include <stdio.h>
int main() {
int a[10], b[10], c[20];
int m, n, i, j, k = 0;
scanf("%d", &m);
for (i = 0; i < m; i++)
scanf("%d", &a[i]);
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &b[i]);
for (i = 0, j = 0; i < m && j < n; k++) {
if (a[i] < b[j])
c[k] = a[i++];
else
c[k] = b[j++];
}
while (i < m) {
c[k] = a[i];
k++; i++;
}
while (j < n) {
c[k] = b[j];
k++; j++;
}
for (i = 0; i < k; i++)
printf("%d#", c[i]);
return 0;
}
总结
像这种合并类的题方法基本差不多,后面的字符串合并及链表合并举一反三~