算法训练 集合运算
标签:cout pre bsp cin strong 思路 遍历 mes tor
问题描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
第一行为一个整数n,表示集合A中的元素个数。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m
输出格式
第一行按从小到大的顺序输出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 7
1 2 3 4
思路:首先三种情况我都是先导入数组,然后排序后输出,交集和余集都好说,两层循环遍历即可,并集想了很久,我先把两个数组都导入一个新的数组,然后排序,然后再输入,重复的不予输出,即 arr3[i] != arr3[i - 1] ,才会输出。
学习:用sort对vector数组排序时,实参是 v.begin(),v.end() ,相应代码即 sort(arr3.begin(), arr3.end(), cmp) , cmp 中若 return a 是升序排列,反之是降序排列。
1 #include 2 #include 3 #include
4 using namespace std;
5
6 bool cmp(int a, int b)
7 {
8 return a b;
9 }
10
11 int main()
12 {
13 int arr1Num,arr2Num;
14 int flag = 0;
15
16 cin >> arr1Num;
17 vectorint> arr1(arr1Num);
18 for (int i = 0; i )
19 {
20 cin >> arr1[i];
21 }
22
23 cin >> arr2Num;
24 vectorint> arr2(arr2Num);
25 for (int i = 0; i )
26 {
27 cin >> arr2[i];
28 }
29
30 //交集
31 int b[2000] = { 0 };
32 int l = -1;
33 for (int i = 0; i )
34 {
35 for (int j = 0; j )
36 {
37 if (arr1[i] == arr2[j])
38 {
39 flag = 1; //有交集
40 b[++l] = arr1[i];
41 }
42 }
43 }
44 if (flag == 1) //有交集才输出换行
45 {
46 sort(b, b + l + 1, cmp);
47 for (int i = 0; i 1; i++)
48 {
49 cout " ";
50 }
51 cout endl;
52 }
53
54 //并集
55 vectorint> arr3(arr1Num+arr2Num);
56 for (int i = 0; i //把两个数组的数字全导入arr3中
57 {
58 arr3[i] = arr1[i];
59 }
60 for (int j = arr1Num; j )
61 {
62 arr3[j] = arr2[j - arr1Num];
63 }
64 sort(arr3.begin(), arr3.end(), cmp); //从小到大排序
65 cout 0] " ";
66 for (int i = 1; i )
67 {
68 if (arr3[i] != arr3[i - 1])
69 {
70 cout " ";
71 }
72 }
73 cout endl;
74
75 //余集
76 int i, j,k = -1;
77 int a[2000] = { 0 }; //先记录下来
78 int cnt = 0;
79 for (i = 0; i )
80 {
81 for (j = 0; j )
82 {
83 if (arr1[i] == arr2[j])
84 {
85 break;
86 }
87 }
88 if (j == arr2Num)
89 {
90 a[++k] = arr1[i];
91 cnt++;
92 }
93 }
94 sort(a, a + k + 1, cmp); //从小到大输出
95 for (i = 0; i )
96 {
97 cout " ";
98 }
99 return 0;
100 }
算法训练 集合运算
标签:cout pre bsp cin strong 思路 遍历 mes tor
原文地址:https://www.cnblogs.com/ZhengLijie/p/12715015.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
算法训练 集合运算
文章链接:http://soscw.com/index.php/essay/55613.html
评论