2013-03-18 45 views
-2

我有一個C#列表:列表產生一組特定的組合

  1. Ç
  2. d

如何能我發現所有的字母組合,其中我以下信件的索引總是更大。所以在這種情況下,組合可以是:A,AB,ABA,C,CD,ADA ...但不是DC,CB ...因爲B索引在C索引之前出現在最後一個例子中。使用索引,1,12,123,146,134將被接受,但類似143的將不被接受,因爲4大於3.

+0

我認爲這是因爲有3'A's列表,所以'ABA'是'123'(或'126'),'ADA'是'156'(參見上面列表中的索引) – MarcinJuraszek 2013-03-18 19:20:44

+0

列表長度是否有限制?每個排列的長度是否有限制?如果您已經嘗試過某些功能,請發佈您的代碼。 – daniloquio 2013-03-18 19:27:40

回答

0

簡單地生成集合{1,2,3,4,5,6}的所有非空子集。對於每個這樣的子集,只需取其數字(按遞增順序)並將其轉換爲相應的字母。這樣你將得到所有可能的字母序列。然後,如有必要,您必須刪除重複項 - 例如A將通過組{1},{3}{6}生成三次。

0

此代碼生成所有的組合(如列表的順序):

static void Main(string[] args) 
    { 
     GetCombination(new List<char> { 'A','B','C' }); 
     Console.ReadKey(); 
    } 
    static void GetCombination(List<char> list) 
    { 
     for (int i = 1; i < Convert.ToInt32(Math.Pow(2, list.Count)); i++) 
     { 
      int temp = i; 
      string str = ""; 
      int j = Convert.ToInt32(Math.Pow(2, list.Count - 1)); 
      int index = 0; 
      while (j > 0) 
      { 
       if (temp - j >= 0) 
       { 
        str += list[index]; 
        temp -= j; 
       } 
       j /= 2; 
       index++; 
      } 
      Console.WriteLine(str); 
     } 
    } 

,輸出是:

C 
B  
BC 
A 
AC 
AB 
ABC