《并集与交集》 题解

目录

题目描述

输入描述

输出描述

解析

完整代码


描述

小鱼同学学习了并集和交集的概念。
(1)数组的并集:给定两个数组A,B,把他们所有的元素合并在一起,并按照从小到大排序组成的集合,叫做数组A与数组B的并集;比如:数组{1, 2, 3} 和 {2, 3, 4} 的并集是 {1, 2, 3, 4}。
(2)数的交集:给定两个数组A,B,由所有属于数组A且属于数组B的元素,并按照从小到大排序组成的集合,所组成的集合,叫做集合A与集合B的交集;比如:数组 {1,2,3} 和 {2,3,4} 的交集为 {2,3}。
现给定2个数组,每个数组都含有若干不重复的元素,请分别求出两个数组的并集和交集(测试数据确认两个集合一定有交集)。

输入描述

第一行有两个整数m和n(m,n都是10~1000之间的整数),分别代表A,B两个数组的长度
第二行有m个整数,代表A数组存储的整数,用空格隔开
第三行有n个整数,代表B数组存储的整数,用空格隔开
注:两个集合的数都是大于等于0的整数

输出描述

第一行输出两个数组的并集,用空格隔开这些元素
第二行输出两个数组的交集,用空格隔开这些元素

用例输入 1 

3 4
2 1 3
5 4 3 2

用例输出 1 

1 2 3 4 5
2 3

这题只要找出并集和交集的特点就简单了:

并集:只要出现过,就属于并集,也就是a[i]>=1;

交集:出现过两次,就属于交集,也就是a[i]==2;

注意,这里的a[i]不是输入进来的数,而是输入的这个数出现的次数;

说实话,很久以前,那时我刚学了桶排序,就尝试着做这题,我却一直都做不出来,所以这题也是我的噩梦,当然,现在看这题也是洒洒水了^_^

下面出示代码:

#include <bits/stdc++.h> 
using namespace std;
int a[1001],m,n,x,maxx;
int main() {
    cin>>m>>n;
    for(int i=1;i<=m+n;i++){
        cin>>x;
        a[x]++;
        if(x>=maxx) maxx=x;
    }
    for(int i=1;i<=maxx;i++){
        if(a[i]>=1)
            cout<<i<<" ";
        
    }
    cout<<endl;
    for(int i=1;i<=maxx;i++){
        if(a[i]==2) 
            cout<<i<<" ";
         
    }
 return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值