我最近开始学习ruby并试图解决一个问题,我必须找到可以被1到20的所有数字整除的最小数字(来自项目euler的问题5)我有以下代码,它始终保持不变正在运行,但我和它一样接近解决它,为什么它一直在运行的任何建议?提前谢谢
class SmallestMultiple
def findMultiple(limit)
number = 1
start = 1
multiple = 0
while start <= limit do
if start == limit
multiple = number
elsif number % start == 0
start +=1
else
start = 1
number +=1
end
end
puts multiple
end
end
integer = SmallestMultiple.new
puts integer.findMultiple(10)
答案 0 :(得分:0)
对于我所看到的,你永远不会停止,因为当start和limit相等时,你没有添加任何东西来启动或退出循环:
if start == limit
multiple = number
start += 1 # Let's be sure we exist if we are done
elsif
...
答案 1 :(得分:0)
当start
等于limit
时,此行会被执行:
multiple = number
但没有其他事情发生,因此start
仍然等于limit
。
您需要break
或start += 1
。
对于limit = 20
,您的脚本会返回232792560
。
另一种方法是将所有素数乘以低于20:
2*3*5*7*11*13*17*19
你得到9699690
,但缺少一些因素。哪一个?
[4, 8, 9, 12, 16, 18, 20]
将9699690
乘以8 = 2*2*2*2
和3
应该涵盖所有内容:
9699690 * 8 * 3
232792560