Java文字列配列アルゴリズム

6354 ワード

Java文字列配列アルゴリズム
 
タイトル:ABCDEの5つのボールの构成の配列の组み合わせは缲り返し抽出することができて最大で16の组み合わせまで何种类の组み合わせの方式がありますか?
例えば、1つのボールを取って構成できる組み合わせはA B C D Eの5種類で、2つのボールを取って構成できる組み合わせは  5+4+3+2+1=15種(BAとABの繰り返し配列を1種とする)
    AA AB AC AD AE
    BB BC BD BE
    CC CD CE
    DD DE
    EE
3球で構成できる組み合わせは(5+4+3+2+1)+(4+3+2+1)+(3+2+1)+(2+1)+1=35種
    AAA AAB AAC AAD AAE
    ABB ABC ABD ABE
    ACC ACD ACE
    ADD ADE
    AEE
 
    BBB BBC BBD BBE
    BCC BCD BCE
    BDD BDE
    BEE
 
    CCC CCD CCE
    CDD CDE
    CEE
 
    DDD DDE
    DEE
 
    EEE
 
プログラムコードの例:
 1 import java.util.Scanner;  2 
 3 /**
 4  *            。                  ,          ,               。  5  */
 6 public class Zuhe {  7     private static String str = "ABCDE";//    
 8     private static int n = 3;//      
 9     private static int count = 0;//     
10 
11     public static void main(String[] args) { 12         new Zuhe(); 13  } 14 
15     public Zuhe() { 16         Scanner input = new Scanner(System.in); 17         System.out.println("         (   " + str.length() + " )"); 18         n = Integer.parseInt(input.nextLine()); 19         find("", 0); 20         System.out.println("  "+count+"   "); 21 
22  } 23     /**
24  *             ,                25      */
26     public static void find(String s, int i) { 27         //          
28         String temp = s; 29         //        
30         if (s.length() == n) { 31             count++; 32 
33             System.out.print(s + " "); 34             if (count % 10 == 0) 35  System.out.println(); 36             return; 37  } 38         //
39         for (int k =i; k < str.length(); k++) { 40             s = temp; 41             s += str.charAt(k); 42  find(s, k); 43  } 44  } 45 }