試題 算法訓練 集合運算 java

試題 算法訓練 集合運算

資源限制
時間限制: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]+" ");	
}
		
	
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章