并集与交集(C++,求解)
描述
小鱼同学学习了并集和交集的概念。
(1)数组的并集:给定两个数组A,B ,把他们所有的元素合并在一起,并按照从小到大排序组成的集合,叫做数组A与数组B的并集;比如:数组{1,2,3}和{2,3,4}的并集是{1,2,3,4}。
(2)数的交集:给定两个数组 A,B,由所有属于数组 A 且属于数组B 的元素,并按照从小到大排序组成的集合,所组成的集合,叫做集合A与集合B的交集;比如:数组{1,2,3}和{2,3,4}的交集为{2,3}。
现给定2个数组,每个数组都含有若干不重复的元素,请分别求出两个数组的并集和交集(测试数据确认两个集合一定有交集)。
输入描述
第一行有两个整数m 和 n(m,n 都是10∼1000之间的整数),分别代表A,B 两个数组的长度。
第二行有m个整数,代表A数组存储的整数,用空格隔开。
第三行有n个整数,代表B数组存储的整数,用空格隔开。
注:两个集合的数都是大于等于0小于等于10000的整数。
输出描述
第一行输出两个数组的并集,用空格隔开这些元素。
第二行输出两个数组的交集,用空格隔开这些元素。
用例输入 1
3 4
2 1 3
5 4 3 2
用例输出 1
1 2 3 4 5
2 3
这里就很无语,他怎么改都是RE,所以就来了。
希望有人帮我改改
#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[1010],b[1010],bing[1010],jiao[1010],idx = 0;
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i ++) cin >> a[i];
for(int i = 1;i <= m;i ++) cin >> b[i];
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++){
if(a[i] != a[j]){
bing[++ idx] = a[i];
bing[++ idx] = b[j];
}
else{
bing[++ idx] = a[i];
}
}
}
sort(bing + 1,bing + 1 + idx);
for(int i = 1;i <= idx;i ++) if(bing[i] != bing[i - 1]) cout << bing[i] << " ";
cout << endl;
idx = 0;
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++){
if(a[i] == b[j]) jiao[++ idx] = a[i];
}
}
sort(jiao + 1,jiao + 1 + idx);
for(int i = 1;i <= idx;i ++){
if(jiao[i] != jiao[i - 1]) cout << jiao[i] << " ";
}
return 0;
}