1

プロジェクトオイラーの2番目の問題の最短の解決策に興味があります。Javaのフィボナッチ数ですら。

フィボナッチ数列の新しい各項は、前の2つの項を追加することによって生成されます。1と2から始めると、最初の10項は次のようになります。1、2、3、5、8、13、21、34、55、89、...値が超えないフィボナッチ数列の項を考慮する400万、偶数の項の合計を求めます。

私が今持っているもの:

public class fibonnaci {
    public static void main(String[] args) {
    int f=0,t=0,n=0,s=1;
    for(;n<4000000;n=f+s){
        f=s;s=n;
        if(n%2==0)t+=n;
    }
    System.out.println(t);
   }
}

読みやすくするためにスペースを追加しました。

これを短くするにはどうすればよいですか(そうでない場合は修正できますか)?

4

2 に答える 2

1

これに対する最善の解決策は、おそらくフィボナッチ数の配列を作成することです。カウンターでループを作成します。少なくとも繰り返し、次の数値を計算し、それを配列にプッシュします。F(n) = F(n-1) + F(n-2) であり、既に F(n-1),F(n-2) が計算されて保存されているため、これは簡単な追加。この数が制限を超えている場合は、ループを終了します。

ここで、1 つおきの数値 (偶数になります) を追加して配列を反復処理します。

これはおそらく、CPU を最も効率的に使用する方法です。

更新: C. Lang が (間接的に) 指摘したように、最後にリストを反復処理する必要がないように、計算するときに合計を維持できます。

于 2013-03-08T04:36:20.870 に答える