2016-06-12 4 views
1

현재 프로젝트 오일러 사이트에서 작은 루비 프로젝트를 작업 중입니다. 나는 피보나치 숫자가 4 백만 미만인 경우조차도 합친 과제를 받았다. 불행히도 내 코드에는 작은 버그가 있습니다. 왜냐하면 제한을 변경할 때 e.i입니다. 100까지, 그것은 44 대신에 188을 인쇄합니다. 놀랍게도이 프로그램은 옳은 대답을 제공하지만 실제로 어떤 식 으로든 제 코드가 잘못되었음을 알지 못합니다.피보나치 짝수 합계

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}" 

답변

1

두 번째 반복에서 문제가 발생합니다. 숫자 중 하나가 한계를 초과하면 (즉, 마지막 숫자가> 100 일 때) 피보나치 숫자의 생성을 중지합니다.

생성 단계 후에 배열이 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144] 인 것으로 밝혀졌습니다. 이는 잘못된 결과 인 188 = 144 + 44를 설명합니다.

그래서 최종 생성 된 요소가 홀수 인 경우에만 코드가 작동합니다. 이는 오일러의 문제 테스트의 경우입니다. 이를 수정하려면 두 번째 반복을 a.each do ... end에서 a[0...-1].each do ... end으로 변경하십시오. 마지막 요소를 제외한 배열을 반복 할 수 있습니다.

+2

매우 감사합니다! 나는이 세상에서 첫 발걸음을 내딛고 있으며 초보자를 돕는 너 같은 사람들이 있다는 것을 기쁘게 생각한다. – Borbat