C #: 0 & 1 Перестановки - PullRequest
       21

C #: 0 & 1 Перестановки

1 голос
/ 09 августа 2010

Я хочу перечислить перестановки только с 0 и 1. Аналогично бинарному, но допускает переменную длину, не должна равняться длине 8 Например:

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

До тех пор, пока длина X не будет достигнута. Как это можно сделать?

Ответы [ 2 ]

5 голосов
/ 09 августа 2010

Вы также можете использовать:

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'));
            }
        }
    }
}

, который не требует рекурсии:)

4 голосов
/ 09 августа 2010

Я бы сделал это как рекурсивный вызов, одна функция для выполнения всей определенной длины, другая для вызова этой для всех соответствующих длин. Следующее полное консольное приложение C # 2008 показывает, что я имею в виду:

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);
        }
    }
}

Это выводит:

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

это то, что я думаю, что вы после.

...