我试图通过尝试构建类似于普通英语解决方案的解决方案来尝试解决Ruby的Project Euler问题。 PEuler#2状态" ...通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数值项的总和"。我制定了一个简单的英语解决方案,例如"添加索引-1和-2并将它们推送到数组。当索引-1小于4百万时,重复该操作。然后取出数组中的每个数字并将其除以2。拿数学残差为0的那些,添加它们并打印结果"。这是我的代码:
seq = [1, 2, 3]
sum = 0
num = 33
while seq[-1] < num do seq.push(seq[-1] + seq[-2]) end
seq.each {|i| if i%2 == 0 then sum += i end}
puts sum
关于如何按照这种逻辑提供解决方案的任何想法?并且,以编程方式,以这种方式解决它是多么正确?
答案 0 :(得分:0)
我会写这样的东西,它会在遇到它们的序列中加上偶数。这样做的好处是只需要序列中的前两个元素,因此保存了seq
数组所使用的内存,并且一旦构建完成就无法扫描整个列表
max = 4_000_000
a, b = 2, 3
sum = 2
while (c = a + b) < max do
sum += c if c % 2 == 0
a, b = b, c
end
puts sum