这是一个用于生成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)
输出结果为:
我突出了重复的部分。
答案 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 }