蓝桥杯:P0705集合运算
输入两个整数集合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
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[]A=setArray(input, n);
int m=input.nextInt();
int[]B=setArray(input, m);
intersection(A, B);
unionSet(A, B);
complementary(A,B);
}
//交集
public static void intersection(int[]A,int[]B){
for (int i=0;i< A.length;i++){
int n=0;
while (n< B.length){
if (A[i]==B[n]){//交集:找相等的
System.out.print(A[i]+" ");
}
n+=1;
}
}
System.out.println("\r");
}
//并集
public static void unionSet(int[]A,int[]B){
int len=A.length+ B.length;
int []merge=new int[len];
int m=0;
for (int i=0;i<len;i++){
if (i<A.length){
merge[i]=A[i];
}else{
merge[i]=B[m];
m+=1;
}
}
Arrays.sort(merge);
Set set=new HashSet();
for (int a:merge){//去重
set.add(a);
}
Iterator iterator=set.iterator();//迭代器
//遍历set中的元素
while (iterator.hasNext()){
System.out.print(iterator.next()+" ");
}
System.out.println("\r");
}
//余集
public static void complementary(int[]A,int[]B){//找A集合中除交集外的
for (int i=0;i<A.length;i++){
int n=0;
while (n<B.length){
if (A[i]==B[n]) break;//相同的跳过while,再对比A的下一位
if (n==B.length-1){//不相同的需要把B中的元素全部对比一遍,直到满足条件再输出A
System.out.print(A[i]+" ");
}
n+=1;
}
}
}
//创建数组,整合现相同代码,减少代码冗余
public static int[] setArray( Scanner input,int N){
int[] a=new int[N];
for (int i=0;i<a.length;i++){
a[i]=input.nextInt();
}
return a;
}
}