代码之家  ›  专栏  ›  技术社区  ›  ParoX

C:0和1排列

  •  1
  • ParoX  · 技术社区  · 15 年前

    我想列出只有0和1的排列。类似于二进制,但允许可变长度,不必等于8个长度。例如:

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

    一直到达到x的长度。怎么能做到?

    2 回复  |  直到 15 年前
        1
  •  4
  •   paxdiablo    15 年前

    我将以递归调用的方式执行此操作,一个函数执行所有特定长度的操作,另一个函数对所有相关长度的操作进行调用。以下完整的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
    

    这就是我想你追求的。

        2
  •  5
  •   NullUserException Mark Roddy    15 年前

    您还可以使用:

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

    它不涉及递归:)

    推荐文章