第七屆藍橋杯java B組試題之分小組小題
阿新 • • 發佈:2019-02-19
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
{
/**
* 最後3個字母
**/
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;
}
/**
* 第4~6字母
**/
public static void f(String s, int[] a)
{
for(int i=0; i<a.length; i++){
if(a[i]==1) continue;//continue跳過
a[i] = 1 ;//第4個字母
for(int j=i+1; j<a.length; j++){
if(a[j]==1) continue;
a[j]=1;//第5個字母
for(int k=j+1; k<a.length; k++){
if(a[k]==1) continue;
a[k]=1;//第6個字母
//此處填 s+" "+(char)(i+'A')+(char)(j+'A')+(char)(k+'A')+" "+remain(a) ,將所有的可能結果輸出來
System.out.println(); //填空位置
a[k]=0;//去標記
}
a[j]=0;//去標記
}
a[i] = 0;//去標記
}
}
public static void main(String[] args)
{
//關鍵點,用0和1來標記字母是否被使用
int[] a = new int[9];//定義一個長度為9的陣列
a[0] = 1;//第1個字母
for(int b=1; b<a.length; b++){
a[b] = 1;//第2個字母
for(int c=b+1; c<a.length; c++){
a[c] = 1;//第3個字母
String s = "A" + (char)(b+'A') + (char)(c+'A');
f(s,a);//呼叫f方法對後面的4~6個字母進行標記
a[c] = 0;//去標記
}
a[b] = 0;//去標記
}
}
}