蓝桥java集合运算_试题 算法训练 集合运算---蓝桥杯

试题 算法训练 集合运算

题目描述:

资源限制

时间限制:1.0s 内存限制:512.0MB

问题描述

给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。

输入格式

第一行为一个整数n,表示集合A中的元素个数。

第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。

第三行为一个整数m,表示集合B中的元素个数。

第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。

集合中的所有元素均为int范围内的整数,n、m<=1000。

输出格式

第一行按从小到大的顺序输出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

思路:

求两个集合的并集,交集,以及集合B在集合A中的补集。思路很简单,直接看代码吧!哪不会可以提出来!

注意:

(1)并集数组至少开到2000。(因为集合A和集合B最大1000).

(2)交集和补集的数组个数可能为0个,结果不能输出多余的换行。

AC代码:

#include

#include

#include

#include

#include

#include

using namespace std;

int a[1000],b[1000];

int bing[2000],jiao[1000],bu[1000];

int main()

{

int n,m,i,j;

cin>>n;

for(i=0;i

cin>>a[i];

cin>>m;

for(i=0;i

cin>>b[i];

//求并集 ,交集

int k=0,k1=0;

for(i=0;i

bing[k++]=a[i];//a数组中的元素一定是并集的一部分,所以先让a数组元素进入并集中

int flag;

for(i=0;i

{

flag=0;

for(j=0;j

{

if(b[i]==a[j])

{

flag=1;

break;

}

}

if(!flag)//数组b中的该元素与数组a中的该元素相同,不必加到并集中

bing[k++]=b[i];

else

jiao[k1++]=b[i];

}

//求b在a中的补集

int k2=0;

for(i=0;i

{

flag=0;

for(j=0;j

{

if(a[i]==jiao[j])

{

flag=1;//补集中不需要a[i]

break;

}

}

if(!flag)//添加到补集中去

bu[k2++]=a[i];

}

sort(bing,bing+k);

sort(jiao,jiao+k1);

sort(bu,bu+k2);

if(k1)//交集中有元素才输出

{

for(i=0;i

cout<

cout<

}

for(i=0;i

cout<

cout<

if(k2)//补集中有元素才输出

{

for(i=0;i

cout<

cout<

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值