c语言求两个集合的并集然后按照从小到大输出

每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超出int范围的整数... 每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超出int范围的整数,每个元素之间有一个空格隔开。
输出
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开。
样例输入
1 2
1
2 3
1 2
1
1 2
我的代码有时候测试正确有时候错误,请问这是为什么
#include<iostream>
using namespace std;
int cmp(const void*a,const void*b)
{
return(*(int*)a-*(int*)b);
}
int main()
{ const int max=100000;
int temp;
int a,b;int A[max],B[max];
while(cin>>a>>b)
{
for(int d=0;d<a;d++)
cin>>A[d];
for(int j=0;j<b;j++)
cin>>B[j];
temp=0;
for(int y=0;y<b;y++)
{
for(int u=0;u<a;u++)
{
if(B[y]==A[u])
temp++;
}
if(temp==0)
A[a++]=B[y];
temp=0;
}
qsort(A,a-1,sizeof(A[0]),cmp);
for(int r=0;r<a;r++)
{
if(r==a-1)
cout<<A[r]<<endl;
else
cout<<A[r]<<" ";
}
}return 0;
}
展开
 我来答
有问题01
2014-11-07
知道答主
回答量:17
采纳率:0%
帮助的人:6.2万
展开全部
qsort(A,a-1,sizeof(A[0]),cmp); a-1改成a 是元素个数

你这个解法复杂度度太大 直接用个set存就行拉
不会用set 就用类似归并的方法A,B排序 判前一个有没和当前的重复
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式