2010-11-27 15 views
2

J'ai une liste de n mots (disons 26). Maintenant, je veux obtenir une liste de toutes les combinaisons possibles, mais avec un maximum de k mots par ligne (disons 5)Obtenir toutes les combinaisons de mots possibles

Donc quand ma liste de mots est: aaa, bbb, ..., zzz Je veux get:

aaa 
bbb 
... 
aaabbb 
aaaccc 
... 
aaabbbcccdddeeefff 
aaabbbcccdddeeeggg 
... 

Je veux le rendre variable, de sorte qu'il fonctionnera avec n'importe quelle valeur n ou k. Il ne devrait pas y avoir de mot deux fois et toutes les combinaisons doivent être prises (même s'il y en a beaucoup).

Comment pourrais-je y parvenir?

EDIT:

Merci pour vos réponses. Ce n'est pas une mission. C'est juste que j'ai oublié les combinaisons de mon mot de passe et je veux être sûr que j'ai toutes les combinaisons testées. Bien que je n'ai pas 26 pièces de mot de passe, mais cela a rendu plus facile d'expliquer ce que je veux.

S'il y a d'autres personnes ayant le même problème, ce lien pourrait être helpfull:
Generate word combination array in c#

+1

Vous trouverez probablement la [Combinaisons code du modèle de projet de code] (http://www.codeproject.com/KB/recipes/Combinatorics.aspx) fait ce dont vous avez besoin. –

Répondre

2

Vous pouvez jeter un oeil à this

Cependant, si vous avez besoin d'obtenir un grand nombre de combinaisons (dans les dizaines de millions) vous devriez utiliser l'évaluation paresseuse pour la génération des combinaisons.

3

j'ai écrit simplement une fonction pour faire

 private string allState(int index,string[] inStr) 
     { 
      string a = inStr[index].ToString(); 
      int l = index+1; 
      int k = l; 
      var result = string.Empty; 
      var t = inStr.Length; 
      int i = index; 
      while (i < t) 
      { 
       string s = a; 
       for (int j = l; j < k; j++) 
       { 
        s += inStr[j].ToString(); 
       } 
       result += s+","; 
       k++; 
       i++; 
      } 

      index++; 
      if(index<inStr.Length) 
       result += allState(index, inStr); 
      return result.TrimEnd(new char[] { ',' }); 
     } 

allState(0, new string[] { "a", "b", "c"}) 
+0

Malheureusement, cela ne fonctionne que pour les listes de 3 chaînes. Rien de plus grand et il commence à manquer des combinaisons. IE: ABCD vous donnera ABCD, ABC, BCD mais il ne donne pas ACD – Talon

Questions connexes