A1021 集合运算
问题描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
第一行为一个整数n,表示集合A中的元素个数。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=1000。
第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
第一行按从小到大的顺序输出A、B交集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
样例输入
5
1 2 3 4 5
5
2 4 6 8 10
1 2 3 4 5
5
2 4 6 8 10
样例输出
2 4
1 2 3 4 5 6 8 10
1 3 5
1 2 3 4 5 6 8 10
1 3 5
样例输入
4
1 2 3 4
3
5 6 7
1 2 3 4
3
5 6 7
样例输出
1 2 3 4 5 6 7
1 2 3 4
1 2 3 4
代码:
package www.tsinsen.com; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.Scanner; import java.util.Set; public class A1021 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); int m=scan.nextInt(); Set<Integer> set1=new HashSet<Integer>(); Set<Integer> set2=new HashSet<Integer>(); for(int i=0;i<m;i++) { set1.add(scan.nextInt()); } int n=scan.nextInt(); for(int j=0;j<n;j++) { set2.add(scan.nextInt()); } int mm=set1.size(); int nn=set2.size(); Iterator<Integer> it1=set1.iterator(); int ii=0; int[] num1=new int[mm]; int[] num2=new int[nn]; while(it1.hasNext()) { num1[ii++]=it1.next(); } int jj=0; Iterator<Integer> it2=set2.iterator(); while(it2.hasNext()) { num2[jj++]=it2.next(); } int[] num=new int[mm+nn]; //将两个数组的元素放在一个新数组中 for(int i=0;i<num1.length;i++) { num[i]=num1[i]; } for(int j=0;j<num2.length;j++) { num[j+num1.length]=num2[j]; } //将新数组排序,两个相邻一样的即为相交元素,不一样的即为并集 Arrays.sort(num); ArrayList<Integer> sb1=new ArrayList<Integer>();//放交集 ArrayList<Integer> sb2=new ArrayList<Integer>();//放并集 ArrayList<Integer> sb3=new ArrayList<Integer>();//放差集 Set<Integer> set=new HashSet<Integer>(); int i; for(i=0;i<num.length-1;i++) { //求交集 if(num[i]==num[i+1]) { sb1.add(num[i]); } //求并集 //set.add(num[i]); if(!sb2.contains(num[i])) { sb2.add(num[i]); } } if(!sb2.contains(num[num.length-1])) { sb2.add(num[num.length-1]); } Arrays.sort(num1); //求差集 for(int j=0;j<num1.length;j++) { if(!sb1.contains(num1[j])) { sb3.add(num1[j]); } } //打印交集 for(int j=0;j<sb1.size();j++) { System.out.print(sb1.get(j)+" "); if(j==sb1.size()-1) { System.out.println(); } } //打印并集 for(int j=0;j<sb2.size();j++) { System.out.print(sb2.get(j)+" "); if(j==sb2.size()-1) { System.out.println(); } } for(int j=0;j<sb3.size();j++) { System.out.print(sb3.get(j)+" "); if(j==sb3.size()-1) { System.out.println(); } } } }