问题描述 给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。 输入格式 第一行为一个整数n,表示集合A中的元素个数。 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。 第三行为一个整数m,表示集合B中的元素个数。 第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。 集合中的所有元素均为int范围内的整数,n、m<=1000。 输出格式 第一行按从小到大的顺序输出A、B交集中的所有元素。 第二行按从小到大的顺序输出A、B并集中的所有元素。 第三行按从小到大的顺序输出B在A中的余集中的所有元素。 样例输入 5 1 2 3 4 5 5 2 4 6 8 10 样例输出 2 4 1 2 3 4 5 6 8 10 1 3 5 样例输入 4 1 2 3 4 3 5 6 7 样例输出 1 2 3 4 5 6 71 2 3 4
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int main() { int n,m,i,j,a[1111],b[1111]; cin>>n; for(i=0;i<n;i++) cin>>a[i]; cin>>m; for(i=0;i<m;i++) cin>>b[i]; sort(a,a+n); sort(b,b+m); int num1=0,num2=0,num3=0,c[1111],d[1111],e[1111]; i=0,j=0; //设置两个指针p和q,同时指向集合A和集合B的最小值,不相等的话移动*p和*q中较小值的指针,相等的话同时移动指针p和q, //并且记下相等的数字,为交集的元素之一 while(i<n&&j<m) { if(a[i]==b[j]) { c[num1++]=a[i]; d[num2++]=a[i]; i++;j++; } else if(a[i]<b[j]) { d[num2++]=a[i]; e[num3++]=a[i]; i++; } else { d[num2++]=b[j]; j++; } } if(i<n) { for(;i<n;i++) d[num2++]=a[i]; } if(j<m) { for(;j<m;j++) d[num2++]=b[j]; } if(num1!=0) { for(i=0;i<num1;i++) printf("%d ",c[i]); cout<<endl; } for(i=0;i<num2;i++) printf("%d ",d[i]); cout<<endl; for(i=0;i<num3;i++) printf("%d ",e[i]); cout<<endl; return 0; }
集合运算
最新推荐文章于 2022-11-19 15:58:12 发布