2013-03-14 8 views
5

私はこの問題に引っかかっていプロジェクトオイラー#2

背景:

フィボナッチ数列の各新しい用語が前の二つの用語を追加することによって生成されます。 1及び2から出発して、最初の10の用語は次のようになります

1、2、3、5、8、13、21、34、55、89、...

の観点を考慮してその値が400万を超えないフィボナッチ配列は、偶数の項の和を求める。

問題がフィボナッチ数ジェネレータ、偶数を取得するコード、または数字を無駄に追加する方法であったかどうかを調べようとしました。

コードは、私がリストに数値を格納することを決めました。ここで、私はそれらを作成します。

list_of_numbers = [] #Holds all the fibs 
even_fibs = [] #Holds only even fibs 

次に、発電機を作成しました。これは、潜在的な問題領域です。

x,y = 0,1 #sets x to 0, y to 1 
while x+y <= 4000000: #Gets numbers till 4 million 
    list_of_numbers.append(y) 
    x, y = y, x+y #updates the fib sequence 

その後、私は数が偶数であるかどうかを確認し、その後even_fibsリストに追加するにはいくつかのコードを作成しました。これはコード内に別の弱点です。

coord = 0 
for number in range(len(list_of_numbers)): 
    test_number = list_of_numbers [coord] 

    if (test_number % 2) == 0: 
     even_fibs.append(test_number) 
    coord+=1 

最後に、情報を表示します。

print "Normal: ", list_of_numbers #outputs full sequence 
print "\nEven Numbers: ", even_fibs #outputs even numbers 
print "\nSum of Even Numbers: ", sum(even_fibs) #outputs the sum of even numbers 

質問

私は、これは恐ろしい質問をするための方法、が、何が間違っているであることを知っていますか?私に答えを与えてはいけません - 問題のある箇所を指摘してください。

+2

'number of range(len(list_of_numbers)):test_number = list_of_numbers [coord]'は 'for list_of_numbers'の' test_number'に変換できます。その後、あなたは 'coord'を取り除くことができます。 –

+0

+1 "私に答えを与えてはいけません - 問題のあるセクションを指摘してください。" –

答えて

4

シーケンスの次の2つの値の合計が4,000,000を超えると停止します。シーケンスのすべての値を 4,000,000まで考慮する必要があります。

+0

ありがとうございました - それはしばらく私を悩ませています。 – xxmbabanexx

+0

これを言うもう一つの方法は[1,40000]です。 – AlexLordThorsen

関連する問題