【问题标题】:Easily calculating and listing binary combinations轻松计算和列出二进制组合
【发布时间】:2011-07-25 06:41:26
【问题描述】:

我有 5 位,因此有 32 种不同的组合。

00000

结尾
11111

有什么方法可以快速列出所有的可能性吗?我可以用手做,但我担心我可能会错过一个。我猜一些聪明的家伙已经写了一些算法和/或建立了一个网站,可以很容易地做到这一点。至少我希望如此。

非常感谢。

【问题讨论】:

  • 您使用哪种编程语言?
  • 实际上是 PHP。表单中有五个可能的故障点,所以我想我只是将错误作为整数传递,然后将其转换为二进制,并根据标记的“位”输出错误消息。这可能是做我想做的事情的一种非常糟糕的方式,但听起来很有效:-)
  • @Django - 你最好进行按位运算来确定设置了哪些标志infernodevelopment.com/bitwise-and-flags
  • 它可能是有效的,但“过早的优化是万恶之源”。首先使代码易于阅读,然后在必要时进行优化。
  • @Jonas,是的,这是真的,但我想不出一种方法来做我想做的事,而不会造成一堆 if 语句。这肯定不是最好的开始方式吗?

标签: php algorithm binary combinations


【解决方案1】:

这会将它们全部放在 Linux 的命令行中。

echo {0..1}{0..1}{0..1}{0..1}{0..1}

【讨论】:

  • 美丽的答案。附加 | tr ' ' '\n' 以将每个数字放在单独的行上。
  • 如果我可以访问 Linux,这无疑是我会做的。
【解决方案2】:

在 Ruby 中:

0b0000.upto(0b1111) {|n| puts n.to_s(2).rjust(4,"0")}
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

【讨论】:

  • 事实证明这是最简单的解决方案。我刚去了TryRuby.org,然后输入:0b00000.upto(0b11111){|n|把 n.to_s(2).rjust(5,"0")}
【解决方案3】:

用 0 到 31 之间的整数写入一列,然后并排写入第二列,其中每个整数的二进制等值。

这样你会增加你不会错过组合的机会。

【讨论】:

    【解决方案4】:

    只需从 0 数到 31 并以二进制形式输出数字。

    应该这样做:

    public static String zeroPad(String str) {
        return "00000".substring(str.length()) + str;
    }
    
    public static void main(String[] args) {
        for (int i = 0; i < 32; i++)
            System.out.printf("%s%n", zeroPad(Integer.toBinaryString(i)));
    }
    

    输出:

    00000
    00001
    00010
    00011
    ...
    11110
    11111
    

    【讨论】:

    • 确定会打印出长度为 5 的字符串?
    • 不,你必须用零填充。
    【解决方案5】:

    for (int i = 0; i > 4) > 3) > 2) > 1)

    【讨论】:

      【解决方案6】:

      Unix:

      echo {0..1}{0..1}{0..1}{0..1} | xargs -n 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-29
        • 1970-01-01
        • 1970-01-01
        • 2022-03-24
        • 2020-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多