2014-06-04 44 views
0

我试图通过试图建立类似于什么用简单的英语解决办法是解决方案来解决项目欧拉问题红宝石。 PEuler#2陈述“...通过考虑斐波纳契数列中不超过四百万的项,找到偶数项的总和”。我制定了一个简单的英文解决方案,如“添加索引-1和-2”,并将它们推送到一个数组,然后在索引-1小于4百万的情况下重复该操作,然后将数组中的每个数字除以2。其数学余数为0,添加并打印结果“。这里是我有的代码:项目欧拉#2红宝石

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 

关于如何提供一个解决方案遵循这个逻辑的任何想法?而且,在编程上,这样解决问题有多正确?

+3

什么是你的问题这里? – tadman

+0

是的,你的逻辑是正确的,如果你将num改为'4000000',那么你应该有正确的答案。 – hjing

回答

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 
+1

在这里发布项目欧拉问题的解决方案是一种uncool,恕我直言... – maerics

+0

@maerics:我还没有听说过欧拉项目。如果您愿意,请举出我的答案 – Borodin

+1

这是一个相当受欢迎的网站,其中有几个编程问题变得越来越困难(https://projecteuler.net/)。在发布解决方案时没有实际的损害,我想这就像发布SO问题一样不太合适。不确定SO社区是否对这类事情有意见。 – maerics