天天看點

藍橋杯 集合運算 java的交集并集差集

問題描述
  給出兩個整數集合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
           

比較水的一道題,沒有什麼坑。java有自帶的集合函數能很快的實作集合運算,通過這道題可以熟悉一下集合的使用.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;

public class Main {
	public static void main(String[] args) throws  IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.valueOf(br.readLine());
		String[] s=br.readLine().split(" ");
		Set<Integer> set1 = new TreeSet<Integer>();
		Set<Integer> set2 = new TreeSet<Integer>();
		Set<Integer> result = new TreeSet<Integer>();
		for(int i=0;i<n;i++) {
			set1.add(Integer.valueOf(s[i]));
		}
		int m=Integer.valueOf(br.readLine());
		s=br.readLine().split(" ");
		for(int i=0;i<m;i++) {
			set2.add(Integer.valueOf(s[i]));
		} 
		//交集
		result.clear();
		result.addAll(set1);
		result.retainAll(set2);
		for(int i:result) {
			System.out.print(i+" ");
		}
		if(result.size()!=0) {
			System.out.println();
		}
		//并集
		result.clear();
		result.addAll(set1);
		result.addAll(set2);
		for(int i:result) {
			System.out.print(i+" ");
		}
		if(result.size()!=0) {
			System.out.println();
		}
		//差集
		result.clear();
		result.addAll(set1);
		result.removeAll(set2);
		for(int i:result) {
			System.out.print(i+" ");
		}
	}
}

           

如果忘記了這些集合也沒有關系,自己根據并集,差集,交集的定義自己模拟也是一樣的,思路不難,就是代碼有點多,細心點就不會錯。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) throws  IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.valueOf(br.readLine());
		String[] s=br.readLine().split(" ");
		int[] a=new int[n];
		for(int i=0;i<n;i++) {
			a[i]=Integer.valueOf(s[i]);
		}
		int m=Integer.valueOf(br.readLine());
		s=br.readLine().split(" ");
		int[] b=new int[m];
		for(int i=0;i<m;i++) {
			b[i]=Integer.valueOf(s[i]);
		} 
		Arrays.sort(a);
		Arrays.sort(b);
		boolean flag=false;
		int p=0,q=0;
		while(p<a.length&&q<b.length) {
			if(a[p]>b[q]) {
				q++;
			}
			else if(a[p]<b[q]) {
				p++;
			}
			else {
				flag=true;
				System.out.print(a[p++]+" ");
				q++;
			}
		}
		if(flag)
			System.out.println();
		p=0;
		q=0;
		while(p<a.length&&q<b.length) {
			if(a[p]>b[q]) {
				System.out.print(b[q++]+" ");
			}
			else if(a[p]<b[q]) {
				System.out.print(a[p++]+" ");
			}
			else {
				System.out.print(a[p++]+" ");
				q++;
			}
		}
		if(p==a.length) {
			while(q<b.length) {
				System.out.print(b[q++]+" ");
			}
		}
		else  {
			while(p<a.length) {
				System.out.print(a[p++]+" ");
			}
		}
		if(p!=0&&q!=0)
			System.out.println();
		p=0;
		q=0;
		while(p<a.length&&q<b.length) {
			if(a[p]>b[q]) {
				q++;
			}
			else if(a[p]<b[q]) {
				System.out.print(a[p++]+" ");
			}
			else {
				p++;
				q++;
			}
		}
		if(q==b.length) {
			while(p<a.length) {
				System.out.print(a[p++]+" ");
			}
		}
	}
}

           

繼續閱讀