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