2010-08-09 5 views
1

Je veux lister les permutations avec seulement 0 et 1. Similaire à binaire mais permettant des longueurs variables, ne doit pas être égale à 8 longueur. Par exemple:C#: 0 & 1 permutations

0 
1 
00 
01 
10 
11 
000 
001 
010 
011 
100 
101 
110 
111 

Tout le chemin jusqu'à ce que la longueur de X soit atteinte. Comment cela peut-il être fait?

+0

un coup d'oeil sur http://www.codeproject.com/KB/recipes/Combinatorics.aspx – Hoque

Répondre

4

Je le ferais comme un appel récursif, une fonction pour faire toute une longueur spécifique, une autre pour appeler cela pour toutes les longueurs pertinentes. Le complet après l'application de la console C# 2008 montre ce que je veux dire:

using System; 

namespace ConsoleApplication1 { 
    class Program { 
     static void permuteN(string prefix, int len) { 
      if (len == 0) { 
       System.Console.WriteLine(prefix); 
       return; 
      } 
      permuteN(prefix + "0", len - 1); 
      permuteN(prefix + "1", len - 1); 
     } 

     static void permute(int len) { 
      for (int i = 1; i <= len; i++) 
       permuteN("", i); 
     } 

     static void Main(string[] args) { 
      permute(3); 
     } 
    } 
} 

Ce sorties:

0 
1 
00 
01 
10 
11 
000 
001 
010 
011 
100 
101 
110 
111 

qui est ce que je pense que vous étiez après.

5

Vous pouvez également utiliser:

using System; 

class Test 
{ 
    static void permute(int len) 
    { 
     for (int i=1; i<=len; i++) 
     { 
      for (int j=0; j<Math.Pow(2, i); j++) 
      { 
       Console.WriteLine (Convert.ToString(j, 2).PadLeft(i, '0')); 
      } 
     } 
    } 
} 

Ce qui implique pas récursion :)

+0

Ah, exactement comment je l'imaginais dans ma tête mais ne le véhiculais pas correctement. :) –

+0

C'est incroyable. Comment dans le monde avez-vous trouvé une solution comme celle-ci? Je m'incline devant toi, NullUserException! –