题目要求: 已知A和B均是由整型数据组成的集合,使用线性表表示集合,设计算法求集合A、B的交集和并集,功能包括输入集合A,输入集合B,求A和B的并集,求A和B的交集。本题中, 线性表的第一个元素位置为1,线性表的最大长度为20。
输入描述 各个命令以及相关数据的输入格式如下: 输入集合A:A,接下来的一行是要输入的集合元素个数n,下面是n行数据,每行数据有一个值,代表集合元素值 输入集合B:B,接下来的一行是要输入的集合元素个数n,下面是n行数据,每行数据有一个值,代表集合元素值 求集合A和B的并集:U 求集合A和B的交集:I 当输入的命令为E时,程序结束 输出描述 当输入的命令为U时,输出A和B两个集合的并集 当输入的命令为I时,输出A和B两个集合的交集 注意,所有的元素均占一行 输入样例 A 5 1 2 3 4 5 B 2 4 6 U I E 输出样例 1 2 3 4 5 6 4
解题思路: 水。
通关代码:
#include <iostream>
#define MaxSize 20
using namespace std;
bool isFindOf(int* arr, int len, int val) {
bool isFind = false;
for (int i = 0; i < len; i++) {
if (arr[i] == val) {
isFind = true;
break;
}
}
return isFind;
}
int main() {
int A[MaxSize], B[MaxSize];
int lenA, lenB;
char command;
while (cin >> command) {
if (command == 'E') break;
switch (command) {
case 'A':
cin >> lenA;
for (int i = 0; i < lenA; i++) {
cin >> A[i];
}
break;
case 'B':
cin >> lenB;
for (int i = 0; i < lenB; i++) {
cin >> B[i];
}
break;
case 'U':
for (int i = 0; i < lenA; i++) {
cout << A[i] << endl;
}
for (int i = 0; i < lenB; i++) {
if (!isFindOf(A, lenA, B[i]))
cout << B[i] << endl;
}
break;
case 'I':
for (int i = 0; i < lenA; i++) {
if (isFindOf(B, lenB, A[i]))
cout << A[i] << endl;
}
break;
}
}
return 0;
}
毕。