2014-06-04 79 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