第一次在贵论坛求助..望大虾帮忙
给你两个集合,要求{A} + {B}.注:同一个集合中不会有两个相同的元素.
Input
每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
Output
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
Sample Input
1 2
1
2 3
1 2
1
1 2
Sample Output
1 2 3
1 2
Author
xhd
Source
计算机学院ACM大学生程序设计竞赛(2006’5)
Recommend
lxj
-.- 看起来这题没啥特别 [第N次RE后,无语] 错误提示是:读写了错误的内存地址...
#include <cstdio>
#include <cstdlib>
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main(){
int mA,nB;
while(scanf("%d%d",&mA,&nB)!=EOF&&mA&&nB)
{
int i,orz,j=0;
long int cnt[40000]={0};
int *C=new int[mA+nB];
for(i=0;i<mA+nB;++i)
{
scanf("%d",&orz);
if(!cnt[orz])
{
++cnt[orz];
C[j]=orz;
++j;
}
}
qsort(C,j,sizeof(int),compare);
for(i=0;i<j;++i)
printf("%d ",C[i]);
printf("\n");
delete []C;
}
return 0;
}