1. 程式人生 > >第七屆藍橋杯---分小組

第七屆藍橋杯---分小組

分小組


9名運動員參加比賽,需要分3組進行預賽。
有哪些分組的方案呢?


我們標記運動員為 A,B,C,... I
下面的程式列出了所有的分組方法。


該程式的正常輸出為:
ABC DEF GHI
ABC DEG FHI
ABC DEH FGI
ABC DEI FGH
ABC DFG EHI
ABC DFH EGI
ABC DFI EGH
ABC DGH EFI
ABC DGI EFH
ABC DHI EFG
ABC EFG DHI
ABC EFH DGI
ABC EFI DGH
ABC EGH DFI
ABC EGI DFH
ABC EHI DFG
ABC FGH DEI
ABC FGI DEH
ABC FHI DEG
ABC GHI DEF
ABD CEF GHI
ABD CEG FHI
ABD CEH FGI
ABD CEI FGH
ABD CFG EHI
ABD CFH EGI
ABD CFI EGH
ABD CGH EFI
ABD CGI EFH
ABD CHI EFG
ABD EFG CHI
..... (以下省略,總共560行)。

public class A
{
	public static String remain(int[] a)
	{
		String s = "";
		for(int i=0; i<a.length; i++){
			if(a[i] == 0) s += (char)(i+'A');
		}	
		return s;
	}
	
	public static void f(String s, int[] a)
	{
		for(int i=0; i<a.length; i++){
			if(a[i]==1) continue;
			a[i] = 1;
			for(int j=i+1; j<a.length; j++){
				if(a[j]==1) continue;
				a[j]=1;
				for(int k=j+1; k<a.length; k++){
					if(a[k]==1) continue;
					a[k]=1;
					System.out.println(__________________________________);  //填空位置
					a[k]=0;
				}
				a[j]=0;
			}
			a[i] = 0;
		}
	}
	
	public static void main(String[] args)
	{
		int[] a = new int[9];		
		a[0] = 1;
		
		for(int b=1; b<a.length; b++){
			a[b] = 1;
			for(int c=b+1; c<a.length; c++){
				a[c] = 1;
				String s = "A" + (char)(b+'A') + (char)(c+'A');
				f(s,a);
				a[c] = 0;
			}
			a[b] = 0;
		}
	}
}




仔細閱讀程式碼,填寫劃線部分缺少的內容。


注意:不要填寫任何已有內容或說明性文字。


答案為 : 

s + " " + (char)(i+'A') + (char)(j+'A') + (char)(k+'A') + remain(a));

遇見這種填空題,把程式碼執行一遍就什麼都看懂了,主函式裡將前三位進行排列,f函式將4,5,6位進行排列,remain函式將後面三位排列。

一開始怎麼都想不對,怎麼會是560,應該是280啊,我還以為自己想錯了,後來看到大牛也說是題出的不好。題目只是說分組,有沒有讓排序,所以這個題是有問題的,答案應該是280.

也可以用比較笨的方法,直接將9個數進行全排列,然後去除重複的。答案就是A88/(6*6*6*6) = 280