1. 程式人生 > >算法題(分小組)

算法題(分小組)

clas ring out pri 序列 main ont 進行 方法

問題:

分小組
9名運動員參加比賽,需要分3組進行預賽。
有哪些分組的方案呢?
我們標記運動員為 A,B,C,... I
下面的程序列出了所有的分組方法。
該程序的正常輸出為:
ABC DEF GHI
ABC DEG FHI
ABC DEH FGI
ABC DEI FGH
ABC DFG EHI
ABC DFH EGI

代碼:

public class Group {
  private static int count;
  public static void main(String[] args) {
    int[] a = new int[9];
    a[0] = 1;

    for (int i = 1; i < a.length; i++) {
      a[i] = 1;
      for (int j = i+1; j < a.length; j++) {
        a[j] = 1;
        secondGroup("A"+(char)(i+‘A‘)+(char)(j+‘A‘),a);
        a[j] = 0;
      }
      a[i] = 0;
    }
  }

  private static void secondGroup(String s, int[] a) {
    for (int i = 1; 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 j2 = j+1; j2 < a.length; j2++) {
          if (a[j2]==1) {
            continue;
          }
          a[j2] = 1;
          thirdGroup(s+(char)(i+‘A‘)+(char)(j+‘A‘)+(char)(j2+‘A‘),a);
          a[j2] = 0;
        }
        a[j] = 0;
      }
      a[i] = 0;
    }
  }

  private static void thirdGroup(String s, int[] a) {
    for (int i = 1; i < a.length; i++) {
      if (a[i]==0) {
        s += (char)(i+‘A‘);
      }
    }
    System.out.println(s);
  }
}

算法題(分小組)