问题描述
小伦同学在新生军训期间因为高中时期突出的编程能力被ACM基地发掘到了,在组织的帮助下他可以实现免军训进而参加基地进行的亚洲区域赛。因此他向教官打了个报告后,准备开溜,这时教官要求他编程实现以下任务才能离开连队:现有两个数组 A 和 B,数组 A 是升序排序的有序数组,数组 B 是降序排序的有序数组,要求把这两个数组合并为一个升序排序的有序数组。面对这样的任务,想必你也能轻而易举解决吧!
输入
第一行输入 N(1 <= N <= 100) 和 M(1 <= M <= 100),分别代表数组 A 和 B 的长度。
第二行输入 N 个数,代表数组 A 。
第三行输入 M 个数,代表数组 B 。
输出
输出一行合并后的数组。
输入范例
3 4 2 3 5 6 4 2 1
输出范例
1 2 2 3 4 5 6
两个数组,一升一绛,升序序列从前往后依次与降序序列从后往前比较,小的写出第三个数组
AC代码:
#include<stdio.h>
int main()
{
int a[102]={0};
int b[102]={0};
int c[204]={0};
int n;
int m;
int sum;
int j;
int i;
int k;
while(scanf("%d %d",&n,&m)!=EOF){
sum=m+n;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<m;j++)
scanf("%d",&b[j]);
i=0;
j=m-1;
for(k=0;k<sum;k++){
if(i==n)
c[k]=b[j--];
else if(j==-1)
c[k]=a[i++];
else if(a[i]<=b[j]){
c[k]=a[i];
i++;
}
else if(a[i]>=b[j]){
c[k]=b[j];
j--;
}
}
for(k=0;k<sum-1;k++)
printf("%d ",c[k]);
printf("%d\n",c[k]);
}
return 0;
}