蓝桥杯——集合运算

问题描述
  给出两个整数集合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++]+" ");
			}
		}
	}
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值