给定以下变量 divisor_array, low, high 定义了一个方法
- 从低到高打印所有数字
- 如果要打印的任何数字都可以被
divisor_array
中的任何除数整除,则打印数字 + 单词“fizzy” - 如果正在打印的数字可以被数组中的所有数字整除,它应该输出数字 + "reallyfizzy"。
测试值:generally_fizzy([2,3],1,7)
我最初的解决方案:
def generally_fizzy(divisor_array, low, high)
divisors = Hash[*divisor_array]
low.upto(high) do |i|
divisors.each_pair do |k,v|
if((i % k == 0) && (i % v == 0))
puts "#{i} reallyfizzy"
elsif ((i % k == 0) || (i % v == 0))
puts "#{i} fizzy"
else
puts i
end
end
end
end
此解决方案通过了给定的测试,但是当 divisor_array
大小从 2 个值增加到 3 个值时,它会打印出重复值。除此之外,代码也不是很优雅。
寻找可以处理 divisor_array
大小变化的可行替代方案。
最佳答案
只需计算数组中有多少个除数将除以该值。我们关心三种情况:
- 全部
- 至少其中之一
- 都没有。
def fizzy(divisors, lo, hi)
lo.upto(hi) do |value|
puts case divisors.count{ |div| value % div == 0 }
when divisors.length # all divisors
"#{value} really fizzy"
when 0 # no divisors
value
else # at least one divisor
"#{value} fizzy"
end
end
end
关于ruby - 通常是 Fizzy ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238491/