[D-OJ练习] 集合的运算

已知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
B
2
4
6
U
I
E

输出样例

1
2
3
4
5
6
2
4

注意:本校oj貌似不给"endl"过.....

#include<iostream>
using namespace std; 

const int N = 21;
int a[N],b[N];
int main()
{
	string A,B;
	int na,nb;
	cin>>A>>na;
	for(int i=0; i<na; i++){
		cin>>a[i];
	}

	cin>>B>>nb;
	
	for(int i=0; i<nb; i++){
		cin>>b[i];
	}

	int sameNum[N],nsame=-1;
	string ch;
	while((cin>>ch)&&ch!="E")
	{
		if(ch=="U"){
			for(int i=0; i<na; i++){
				cout<<a[i];
			}
			for(int i=0; i<nb; i++){
				int ret=0;
				for(int j=0; j<na; j++){
					if(a[j]==b[i]){
						ret=1;
						break;
					}
				}
				if(!ret){
					cout<<b[i];
				}			
			}
		}else if(ch=="I"){
			for(int i=0; i<na; i++){
				for(int j=0; j<nb; j++){
					if(a[i]==b[j])
					{
						sameNum[++nsame]=a[i];
						//cout<<a[i]<<endl;
						
					}
				}
			}
			for(int i=0; i<=nsame; i++){
				cout<<sameNum[i];
//				if(i!=nsame){
//					cout<<endl;
//				}
			}
		}
	}		
	return 0;
}

posted @ 2021-09-23 23:50  泥烟  阅读(65)  评论(0编辑  收藏  举报