算法训练 集合运算
描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入
输入描述:
第一行为一个整数n,表示集合A中的元素个数。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=1000。
输入样例:
5
1 2 3 4 5
5
2 4 6 8 10
输出
输出描述:
第一行按从小到大的顺序输出A、B交集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
输出样例:
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 in = new Scanner(System.in);
ArrayList<Integer> arr1 = new ArrayList<>();
ArrayList<Integer> arr2 = new ArrayList<>();
int num1 = in.nextInt();
//从键盘输入值存入集合中
for (int i = 0; i < num1; i++) {
arr1.add(in.nextInt());
}
int num2 = in.nextInt();
for (int i = 0; i < num2; i++) {
arr2.add(in.nextInt());
}
crossnumber(arr1,arr2);
}
public static void crossnumber(ArrayList<Integer> arr1,ArrayList<Integer> arr2){
ArrayList<Integer> arr3 = new ArrayList<>();//交集
ArrayList<Integer> arr4 = new ArrayList<>();//并集
ArrayList<Integer> arr5 = new ArrayList<>();//余集中的所有元素。
for (int i :arr1
) {
arr4.add(i);
}
for (int i :arr2
) {
if(arr4.contains(i) == true) continue;//如果A,B集合中都有该元素则只添加一次
if(arr4.contains(i) == false) arr4.add(i);
}
for (int i:arr1
) {
if(arr2.contains(i) == true){//添加既存在于A集合右存在于B集合的元素
arr3.add(i);
}
}
for (int i:arr1
) {
if(arr2.contains(i) == false){//添加存在于A集合中不存在于B集合的元素。
arr5.add(i);
}
}
//对3个输出集合排序
Collections.sort(arr3);
Collections.sort(arr4);
Collections.sort(arr5);
input(arr3);
input(arr4);
input(arr5);
}
//输出函数
public static void input(ArrayList<Integer> arr){
for (int i :arr
) {
System.out.print(i+" ");
}
System.out.println();
}
}