[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;
}
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799101.html