【ACM之旅】集合运算
来源:互联网 发布:oppo相机软件下载 编辑:程序博客网 时间:2024/05/29 10:35
一、[题目] 集合运算
时间限制: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
二、[代码]:
PS. 集合运算 是一道稍有难度的入门级数学类题目,解题的关键在于充分理解交集、并集与余集,从题目中所给的样例我们不难理解这三者,所以需要我们利用一定的算法将其输出,由于还需要将结果按从小到大输出,因此我们不防先对所有元素排序,再根据集合特点进行输出,以下列出我的解法。
算法一: 先行排序法(先排序,再取集)
#include <stdio.h>#include <stdlib.h>int cmp(const void *a, const void *b){ return *(int*)a-*(int*)b;}int main(){ int i,j,n,m,a[2000],b[1000]; scanf("%d",&i); n=i; while(i--){ scanf("%d",&a[i]); } scanf("%d",&i); n+=m=i; while(i--){ scanf("%d",&a[n-i-1]); b[i]=a[n-i-1]; } qsort(a,n,4,cmp); //对所有取得的数进行先行排序 i=0; while(++i<n){ //取交集 if(a[i]==a[i-1]) printf("%d ",a[i]); } printf("\n",i=0); while(++i<=n){ //取并集 if(a[i]!=a[i-1]) printf("%d ",a[i-1]); } printf("\n",i=0); while(++i<=n){ //取余集 if(a[i]!=a[i-1]&&(i>1?a[i-1]!=a[i-2]:1)){ j=0; while(j<m&&a[i-1]!=b[j++]){} if(a[i-1]!=b[j-1]) printf("%d ",a[i-1]); } } return 0;}
欢迎评论和转载,转载请注明文章出处,我对此表示最真诚的敬意!
1 0
- 【ACM之旅】集合运算
- ACM-矩阵之基础运算
- Oracle数据库之集合运算
- 集合的运算之链表实现
- 12-Oracle入门之集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 集合运算
- 学习ACM之路-大数的幂运算
- [操作系统]简单理解P,V操作
- RethinkDB创始人教你如何打造一个伟大的产品
- uva 507 Jill Rides Again (DP)
- 阶乘末尾0的个数(分解质因数)
- 李彦宏提案中国大脑
- 【ACM之旅】集合运算
- Apache下的LRUMap
- 高通AR增强现实最新教程unity3d
- poi 级联
- 使用gcc的-finstrument-functions选项进行函数跟踪
- innerText的兼容性
- BZOJ-3531-旅行
- 交大机试(分解质因数)
- 3Sum