目录
题目描述:
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
数据范围: 1<= n, m <= 1000 \1≤n,m≤1000 , 序列中的值满足 0<=val<=30000
输入描述:
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。
第二行包含n个整数,用空格分隔。
第三行包含m个整数,用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
思路解析:
其实就是产生两个序列数组,把他们合在一起,然后升序输出就可以了,但是这里的升序输出怎么实现呢?其实我们定义一个变量去遍历这个数组让前一项和后一项比较,如果前一项大于后一项,就交换他们的位置,这样就完成了小在前,大在后的顺序,最后在输出就好了。废话不多说我们直接上代码。
源码:
#include <stdio.h>
int main ()
{
int n,m;
scanf("%d %d",&n,&m);
int arr[10000];
int i =0;
int j =0;
int t;
for(i=0;i<n;i++)
{
scanf("%d ",&arr[i]);
}
for(i=n;i<n+m;i++)
{
scanf("%d ",&arr[i]);
}
for(i=0;i<n+m;i++)
{
for(j=0;j<n+m-i-1;j++)
{
if(arr[j]>arr[j+1])
{
t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
for(i=0;i<n+m;i++)
{
printf("%d ",arr[i]);
}
return 0;
}