A1021 集合运算

问题描述

  给出两个整数集合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 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();
            }
        }
    }

}

 

posted @ 2018-02-04 20:45  henu小白  阅读(192)  评论(0编辑  收藏  举报