問題描述
給出兩個整數集合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++]+" ");
}
}
}
}