1. 程式人生 > >第七屆藍橋杯java B組試題之分小組小題

第七屆藍橋杯java B組試題之分小組小題

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;//去標記 } } }