集合运算 蓝桥杯 set容器

题目描述

  给出两个整数集合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 }