在Ruby中生成n位的二进制字符串?

时间:2014-06-27 12:59:08

标签: ruby

这是一个用于生成n位二进制字符串的程序。我得到的错误结果是这个答案中有一些重复。我无法弄清楚问题是什么? 这是代码:

class GenString
    def initialize(n)
        @a = Array.new(n)
    end

    def binString(n)
        if n < 0
            @a.each_slice(3) { |a,b,c| puts [a,b,c]*'  '}
        else
            @a[n-1] = 0
            binString(n-1)
            @a[n-1] = 1
            binString(n-1)
        end
    end
end

gen = GenString.new(3)
gen.binString(3)

输出结果为:

enter image description here

我突出了重复的部分。

3 个答案:

答案 0 :(得分:3)

有一种更简单的方法来生成二进制字符串:

(0..7).each do |n|
  puts "%03b" % n
end

输出:

000
001
010
011
100
101
110
111

答案 1 :(得分:0)

简单地说:因为你告诉它打印两次。

#binString内的条件更改为if n < 1,它会正常工作。

请参阅此提示:http://ideone.com/jjmTBh

我刚注意到这会向后打印系列。您可以将[a,b,c]交换为[c,b,a]以弥补此问题。我改变了想法以反映这一点。

答案 2 :(得分:0)

对于更惯用的Ruby版本,我推荐这样的东西:

def bin_string(n)
  (0..2**n-1).map { |i| "%0#{n}b" % i }
end
bin_string(3)
#=> ["000", "001", "010", "011", "100", "101", "110", "111"]

如果你真的想直接输出(我不愿意),请将方法的主体更改为:

(0..2**n-1).each { |i| puts "%0#{n}b" % i }