目录
题目描述
输入描述
输出描述
解析
完整代码
描述
小鱼同学学习了并集和交集的概念。
(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的整数
输出描述
第一行输出两个数组的并集,用空格隔开这些元素
第二行输出两个数组的交集,用空格隔开这些元素
用例输入 1
3 4 2 1 3 5 4 3 2
用例输出 1
1 2 3 4 5 2 3
这题只要找出并集和交集的特点就简单了:
并集:只要出现过,就属于并集,也就是a[i]>=1;
交集:出现过两次,就属于交集,也就是a[i]==2;
注意,这里的a[i]不是输入进来的数,而是输入的这个数出现的次数;
说实话,很久以前,那时我刚学了桶排序,就尝试着做这题,我却一直都做不出来,所以这题也是我的噩梦,当然,现在看这题也是洒洒水了^_^
下面出示代码:
#include <bits/stdc++.h>
using namespace std;
int a[1001],m,n,x,maxx;
int main() {
cin>>m>>n;
for(int i=1;i<=m+n;i++){
cin>>x;
a[x]++;
if(x>=maxx) maxx=x;
}
for(int i=1;i<=maxx;i++){
if(a[i]>=1)
cout<<i<<" ";
}
cout<<endl;
for(int i=1;i<=maxx;i++){
if(a[i]==2)
cout<<i<<" ";
}
return 0;
}