试题 算法训练 集合运算
资源限制
时间限制: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
//解题思路:先获取二个数组一样的数(交集),
//在其中一个数组减去交集数值,加上另一个数组获得并集。
//用第一个数组减去交集获得余集
package Main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] nn=new int[n];
for (int i = 0; i < nn.length; i++) {
nn[i]=sc.nextInt();
}
int m=sc.nextInt();
int[] mm=new int[m];
for (int i = 0; i < mm.length; i++) {
mm[i]=sc.nextInt();
}
//bin并集,jiao交集,yv n在m中的余集
int[] bin=new int[n+m];
int[] jiao=new int[n+m];
int[] yv=new int[n+m];
//用于获取并集,交集,余集的长度
int bina=0,jiaob=0,yvc=0;
for (int i = 0; i < nn.length; i++) {
for (int j = 0; j < mm.length; j++) {
//用于判断m和n是否一样数获取交集
if(nn[i]==mm[j]) {
jiao[jiaob]=nn[i];
jiaob++;
break;
}
}
}
//用于判断m中n存在和交集一样数获取并集中m数
for (int j = 0; j < mm.length; j++) {
for (int j2 = 0; j2 < jiao.length; j2++) {
if(mm[j]==jiao[j2]) {
break;
}
if(j2+1==jiao.length) {
bin[bina]=mm[j];
bina++;
}
}
}
//用于判断n中存在和交集一样数获取余集
for (int j = 0; j < nn.length; j++) {
for (int j2 = 0; j2 < jiao.length; j2++) {
if(nn[j]==jiao[j2]) {
break;
}
if(j2+1==jiao.length) {
yv[yvc]=nn[j];
yvc++;
}
}
}
//获取m数的并集,再获取n中所有数值到并集中
for (int j = 0; j < nn.length; j++) {
bin[bina]=nn[j];
bina++;
}
//对并集,交集,余集的进行大小排序
for (int j= 0; j < bina-1; j++) {
for (int i = 0; i < bina-1; i++) {
if(i<jiaob-1&&j<jiaob-1) {
if(jiao[i]>jiao[i+1]) {
int a=jiao[i];
jiao[i]=jiao[i+1];
jiao[i+1]=a;
}
}
if(i<yvc-1&&j<yvc-1) {
if(yv[i]>yv[i+1]) {
int b=yv[i];
yv[i]=yv[i+1];
yv[i+1]=b;
}
}
if(bin[i]>bin[i+1]) {
int c=bin[i];
bin[i]=bin[i+1];
bin[i+1]=c;
}
}
//对并集,交集,余集的进行输出
}
for (int i = 0; i < jiaob; i++) {
System.out.print(jiao[i]+" ");
if(i+1==jiaob)
System.out.println();
}
for (int i = 0; i < bina; i++) {
System.out.print(bin[i]+" ");
if(i+1==bina)
System.out.println();
}
for (int i = 0; i < yvc; i++) {
System.out.print(yv[i]+" ");
}
}
}