已知两组递增的有序数列(数据无重复)。编写程序将两组数列合并为一组递增的有序数列,且合并后的该组数列中相同的整数只出现一次。
如(1 5 7 9)∪(2 3 7 10)⇒(1 2 3 5 7 9 10)
输入格式:
第一行输入第一个数组的元素个数 m(m≤10),之后依次输入m个递增的整数; 第三行输入第二个数组的元素个数 n(n≤10),之后依次输入n个递增的整数,数据之间以空格间隔。
输出格式:
在一行中依次输出合并后的递增数列,每个数据之间有一个空格,行末无多余空格。
输入样例:
4
1 5 7 9
4
2 3 7 10
输出样例:
1 2 3 5 7 9 10
解答示例:
#include <stdio.h>
int main() {
int m,n,i,j,k,t=0,num;
scanf("%d",&m);
int c[m];
for(i=0; i<m; i++) {
scanf("%d",&c[i]);
}
scanf("%d",&n);
int b[n];
for(i=0; i<n; i++) {
scanf("%d",&b[i]);
}
//用变量来定义数组的大小;
int a[m+n];
for(i=0; i<m; i++) {
a[i]=c[i];
}
for(i=0; i<n; i++) {
a[m+i]=b[i];
}//把两个数组合并成一个
for(i=0; i<m+n-1-t; i++) {
for(j=i+1; j<m+n-t; j++) {
if(a[i]==a[j]) {
for(k=j; k<m+n-t; k++) {
a[k]=a[k+1];
}
t++;
}
}
}//把重复的合成一个,整体向前移动位置
for(i=0; i<m+n-t; i++) {
for(j=i+1; j<m+n-t; j++) {
if(a[i]>a[j]) {
num=a[i];
a[i]=a[j];
a[j]=num;
}
}
}//通过循环调整大小顺序排序
for(i=0; i<m+n-t-1; i++) {
printf("%d ",a[i]);
}
printf("%d",a[m+n-t-1]);//分类输出,确保最后一个字符没有空格
return 0;
}