题目描述
给出两个整数集合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
4
1 2 3 4
3
5 6 7
样例输出
2 4
1 2 3 4 5 6 8 10
1 3 5
1 2 3 4 5 6 7
1 2 3 4
空格:每个数之后都有,不必控制,注意b中没有元素也要占一行;
1 #include <iostream> 2 #include <algorithm> 3 #include <set> 4 using namespace std; 5 int a[1000],b[1000]; 6 int main() 7 { 8 int m,n,len1,len2,k,i; 9 while(cin>>n) 10 { 11 len1=0;len2=0; 12 set< int >mm; 13 set< int >::iterator it; 14 for(i=0;i<n;i++) 15 { 16 cin>>a[i]; 17 mm.insert(a[i]); 18 } 19 cin>>m; 20 for(i=0;i<m;i++) 21 { 22 len2=mm.size(); 23 cin>>k; 24 mm.insert(k); 25 if(mm.size()==len2)//检查是否存在相同的元素, 26 {b[len1]=k;len1++;}//存在的话存到另外一个数组中 27 } 28 sort(b,b+len1); 29 for(i=0;i<len1;i++) 30 { 31 cout<<b[i]<<" "; 32 } 33 cout<<endl;//注意:即使b中没有元素也要换行 34 for(it = mm.begin(); it != mm.end(); ++it) 35 cout<<*it<<" ";//按顺序输出,元素 36 cout<<endl; 37 sort(a,a+n); 38 int j=0,kkk=0;// 39 for(i=0; i<n; i++) 40 { 41 if(len1==0) 42 cout<<a[i]<<" "; 43 else 44 { 45 /////不知道为什么下次输入的时候b中的元素还存在, 46 // 所以换了个方法控制相同的元素 47 if(a[i]!=b[j]) 48 cout<<a[i]<<" "; 49 else j++; 50 } 51 } 52 cout<<endl; 53 } 54 return 0; 55 }