OJ刷题记录:集合的运算 题目编号:456

集合的运算 题目编号:456

题目要求:
已知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;
} 

毕。

猜你喜欢

转载自blog.csdn.net/weixin_45711556/article/details/108799698
456