作者在 2011-03-22 17:35:57 发布以下内容
合并有序数组
时限:1000ms 内存限制:10000K 总时限:3000ms
int main()
{
int n,m,k,l;
int a[25]={0};
int b[25]={0};
int c[50]={0};
int i=0;int j=0;
int *p,*q;
p=a;q=b;
scanf("%d",&n);
while(i<n)
{
scanf("%d",&a[i]);
i++;
}
i=0;
scanf("%d",&m);
while(i<m)
{
scanf("%d",&b[i]);
i++;
}
i=0;l=0;
while(l<n&&j<m)
{
if(*p<*q)
{
c[i]=*p;
p++;
l++;
}
else
{
c[i]=*q;
q++;
j++;
}
i++;
}
if(l==n)
{
k=m-j;
while(k!=0)
{
c[i]=*q;
q++;
k--;
i++;
}
}
else
{
k=n-l;
while(k!=0)
{
c[i]=*p;
p++;
k--;
i++;
}
}
for(i=0;i<m+n;i++)
{
printf("%d\n",c[i]);
}
return 0;
}
描述:
给你两个有序且升序的数组,请你把它们合成一个升序数组并输出
输入:
第一行为N,N<=20 ;
第二行为N个数字,这N个数字用一个空格隔开
第三行为M,M<=20 ;
第四行为M个数字,这M个数字用一个空格隔开
所有数均可用int型表示
输出:
输出合并后的数组,每行输出一个,最后输出一个回车
输入样例:
3
1 3 7
5
2 4 6 8 10
输出样例:
1
2
3
4
6
7
8
10
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,m,k,l;
int a[25]={0};
int b[25]={0};
int c[50]={0};
int i=0;int j=0;
int *p,*q;
p=a;q=b;
scanf("%d",&n);
while(i<n)
{
scanf("%d",&a[i]);
i++;
}
i=0;
scanf("%d",&m);
while(i<m)
{
scanf("%d",&b[i]);
i++;
}
i=0;l=0;
while(l<n&&j<m)
{
if(*p<*q)
{
c[i]=*p;
p++;
l++;
}
else
{
c[i]=*q;
q++;
j++;
}
i++;
}
if(l==n)
{
k=m-j;
while(k!=0)
{
c[i]=*q;
q++;
k--;
i++;
}
}
else
{
k=n-l;
while(k!=0)
{
c[i]=*p;
p++;
k--;
i++;
}
}
for(i=0;i<m+n;i++)
{
printf("%d\n",c[i]);
}
return 0;
}