2012-06-30 65 views
0

請看看下面的代碼根據「斐波納契數列」中找到答案

package Euler; 

import java.util.ArrayList; 
import java.util.List; 

public class Problem2 
{ 
    public static void main(String[]args) 
    { 
     int firstNumber=1; 
     int secondNumber=2; 
     int thirdNumber = 0; 

     int sum = 0; 

     List array = new ArrayList(); 

     while(true) 
     { 

      if(thirdNumber>=400000) 
      { 
       break; 
      } 
      else 
      { 
       thirdNumber = firstNumber+secondNumber; 
       System.out.println(thirdNumber); 


       if(thirdNumber%2==0) 
       { 
        array.add(thirdNumber); 
       } 

       firstNumber = secondNumber; 
       secondNumber = thirdNumber; 
      } 
     } 

     for(int i=0;i<array.size();i++) 
     { 
      int num = Integer.parseInt(array.get(i).toString()); 

      sum = sum+num; 
     } 

     System.out.println("The Sum is: "+sum); 
    } 
} 

在這裏,我想解決this問題,從項目歐拉,這是問題所在呢。

Fibonacci序列中的每個新項都是通過添加 前兩項生成的。通過用1和2開始,第一10個術語將 是:

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

通過考慮術語在斐波納契數列中值不爲 超過400萬的情況下,找到偶數項的和。

這是我得到的答案 - 257112;

它說答案是錯誤的。我不知道這是爲什麼。爲了您的信息,我的母語不是英語,我也沒有用英語做數學。所以我懷疑我是否誤解了這個問題。

請幫我找到解決這個問題的正確方法。由於

+1

@nhahtdh沒有,沒有序列超過四百萬小在許多方面。用'int'正常工作。 –

+2

這是一個項目歐拉問題,所以人們應該避免提供解決方案。 – 2012-06-30 15:55:52

+0

正確答案是sum = 4613732.在擔心總和之前,您應該確定您的Fibonnaci數字是正確的。看看你是否可以創建一個值列表並讓它們正確。 – duffymo

回答

7

通過考慮其值不超過4萬元斐波那契序列的條款......

的一個問題是在這裏:

if(thirdNumber>=400000) 

這不是四萬元。你還需要一個零。

+0

感謝您的回覆。其餘的東西是正確的?我的意思是,我遵循正確的數學方法嗎? – user1484871

+0

@ user1484871:好吧,我已經快速瀏覽過它,它看起來不錯,但是這一行有點......錯誤......不必要的:'int num = Integer.parseInt(array.get(i)。 toString());'爲什麼要轉換爲一個字符串,然後解析它回到一個int?它在開始時已經是一個Integer了。只需調用'intValue'。並使用通用列表,因此您不需要投射。你也可以計算總和,而不是將整數存儲在列表中,然後在最後求和。該列表根本不需要。 –

+0

你似乎還沒有在總和中包括術語'2'。你添加數組的第一項似乎是「8」。 –

0

你可以讓這個更有效的通過

  • 計算總和,而計算斐波那契數(所以你不必來存儲它們)
  • 如果你沒有使用集合,使用泛型代替轉換爲字符串並解析它(這是非常低效的)
  • 請注意,每個第三個值都是偶數,所以您不需要檢查均勻。

嘗試

long a = 1, b = 1, c, sum = 0; 
while ((c = a + b) < 4000000) { 
    sum += c; 
    a = b + c; 
    b = c + a; 
} 
System.out.println(sum);