【发布时间】:2014-01-20 15:57:41
【问题描述】:
给定以下变量 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 大小变化的可行替代方案。
【问题讨论】:
-
你为什么要检查对而不是一一检查值?
-
家庭作业还是教程?