#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int lena,lenb,a[1050],b[1050];
void union_set(int a[],int b[],int lena,int lenb){
int tmp[2050],cnt=0;
for (int i = 0; i < lena; i ++ ){
tmp[cnt++]=a[i];
}
for (int j = 0; j < lenb; j ++ ){
tmp[cnt++]=b[j];
}
sort(tmp,tmp+cnt);
int n = unique(tmp,tmp+cnt) - tmp;
for (int i = 0; i < n; i ++ ){
if(i!=n-1){
printf("%d ",tmp[i]);
}else{
printf("%d",tmp[i]);
}
}
printf("\n");
}
void intersection_set(int a[],int b[],int lena,int lenb){
int tmp[1050],cnt=0;
for (int i = 0; i < lena; i ++ ){
for (int j = 0; j < lenb; j ++ ){
if(a[i]==b[j]){
tmp[cnt++]=a[i];
}
}
}
sort(tmp,tmp+cnt);
for (int i = 0; i < cnt; i ++ ){
if(i!=cnt-1){
printf("%d ",tmp[i]);
}else{
printf("%d",tmp[i]);
}
}
printf("\n");
}
void complementary_set(int a[],int b[],int lena,int lenb){
int tmp[1050],cnt=0,flag = 0;
for (int i = 0; i < lena; i ++ ,flag = 0){
for (int j = 0; j < lenb; j ++ ){
if(a[i]==b[j]){
flag=1;
}
}
if(!flag){
tmp[cnt++] = a[i];
}
}
sort(tmp,tmp+cnt);
for (int i = 0; i < cnt; i ++ ){
if(i!=cnt-1){
printf("%d ",tmp[i]);
}else{
printf("%d",tmp[i]);
}
}
printf("\n");
}
int main()
{
scanf("%d", &lena);
for (int i = 0; i < lena; i ++ ){
scanf("%d", &a[i]);
}
scanf("%d", &lenb);
for (int i = 0; i < lenb; i ++ ){
scanf("%d", &b[i]);
}
intersection_set(a,b,lena,lenb);
union_set(a,b,lena,lenb);
complementary_set(a,b,lena,lenb);
return 0;
}
资源限制
时间限制: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