試題 算法訓練 集合運算
資源限制
時間限制:1.0s 內存限制:512.0MB
問題描述
給出兩個整數集合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 Main;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] nn=new int[n];
for (int i = 0; i < nn.length; i++) {
nn[i]=sc.nextInt();
}
int m=sc.nextInt();
int[] mm=new int[m];
for (int i = 0; i < mm.length; i++) {
mm[i]=sc.nextInt();
}
//bin並集,jiao交集,yv n在m中的餘集
int[] bin=new int[n+m];
int[] jiao=new int[n+m];
int[] yv=new int[n+m];
//用於獲取並集,交集,餘集的長度
int bina=0,jiaob=0,yvc=0;
for (int i = 0; i < nn.length; i++) {
for (int j = 0; j < mm.length; j++) {
//用於判斷m和n是否一樣數獲取交集
if(nn[i]==mm[j]) {
jiao[jiaob]=nn[i];
jiaob++;
break;
}
}
}
//用於判斷m中n存在和交集一樣數獲取並集中m數
for (int j = 0; j < mm.length; j++) {
for (int j2 = 0; j2 < jiao.length; j2++) {
if(mm[j]==jiao[j2]) {
break;
}
if(j2+1==jiao.length) {
bin[bina]=mm[j];
bina++;
}
}
}
//用於判斷n中存在和交集一樣數獲取餘集
for (int j = 0; j < nn.length; j++) {
for (int j2 = 0; j2 < jiao.length; j2++) {
if(nn[j]==jiao[j2]) {
break;
}
if(j2+1==jiao.length) {
yv[yvc]=nn[j];
yvc++;
}
}
}
//獲取m數的並集,再獲取n中所有數值到並集中
for (int j = 0; j < nn.length; j++) {
bin[bina]=nn[j];
bina++;
}
//對並集,交集,餘集的進行大小排序
for (int j= 0; j < bina-1; j++) {
for (int i = 0; i < bina-1; i++) {
if(i<jiaob-1&&j<jiaob-1) {
if(jiao[i]>jiao[i+1]) {
int a=jiao[i];
jiao[i]=jiao[i+1];
jiao[i+1]=a;
}
}
if(i<yvc-1&&j<yvc-1) {
if(yv[i]>yv[i+1]) {
int b=yv[i];
yv[i]=yv[i+1];
yv[i+1]=b;
}
}
if(bin[i]>bin[i+1]) {
int c=bin[i];
bin[i]=bin[i+1];
bin[i+1]=c;
}
}
//對並集,交集,餘集的進行輸出
}
for (int i = 0; i < jiaob; i++) {
System.out.print(jiao[i]+" ");
if(i+1==jiaob)
System.out.println();
}
for (int i = 0; i < bina; i++) {
System.out.print(bin[i]+" ");
if(i+1==bina)
System.out.println();
}
for (int i = 0; i < yvc; i++) {
System.out.print(yv[i]+" ");
}
}
}