2016-06-12 9 views
1

Ich arbeite derzeit an kleinen Rubin-Projekten von Projekt Euler Website. Ich bekam eine Aufgabe, sogar Fibonacci-Zahlen zu addieren, die weniger als 4 Millionen sind. Leider gibt es einen kleinen Fehler in meinem Code, denn wenn ich das Limit e.i. bis 100, es druckt 188 statt 44. Überraschenderweise gibt dieses Programm die richtige Antwort, aber ich weiß nicht wirklich, in welcher Weise mein Code falsch ist.Summe der Fibonacci gerade Nummer

a=[]; a[0]=1; a[1]=1; 
i = 1 
while a[-1] < 608 
    a[i+1]=(a[i] + a[i-1]) 
    i +=1 
end 
x = 0 
a.each do |num| 
    if num % 2 == 0 
    x += num 
    end 
end 
print "The sum of even Fibonacci number is: #{x}" 

Antwort

1

Das Problem kommt von der zweiten Iteration. Sie stoppen die Generierung von Fibonacci-Zahlen, wenn eine der Zahlen das Limit überschreitet (dh wenn die letzte Zahl> 100 ist).

Es stellt sich heraus, dass nach dem Generierungsschritt das Array [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] ist, dies erklärt Ihr falsches Ergebnis 188 = 144 + 44.

Ihr Code funktioniert also nur, wenn das letzte generierte Element ungerade ist, was in Eulers Problemtest der Fall ist. Um dies zu korrigieren, ändern Sie die zweite Iteration von a.each do ... end zu a[0...-1].each do ... end, um das Array mit Ausnahme des letzten Elements zu durchlaufen.

+2

Ich bin sehr dankbar! Ich mache gerade meine ersten Schritte in dieser Welt und ich bin sehr froh, dass es Leute wie dich gibt, die Anfängern helfen. – Borbat