1

我对 Euler 项目的第二个问题的最短解决方案感兴趣:Java 中的偶数斐波那契数。

斐波那契数列中的每个新项都是通过添加前两项来生成的。从 1 和 2 开始,前 10 项将是:1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... 通过考虑斐波那契数列中其值不超过的项四百万,求偶数项之和。

我目前拥有的:

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),这将是简单的加法。如果此数字超出您的限制,请退出循环。

现在遍历数组添加每隔一个数字(这将是偶数)。

这可能是您对 CPU 的最有效使用。

更新:正如 C. Lang(间接)指出的那样,您可以在计算时保持总和,以避免在最后遍历列表。

于 2013-03-08T04:36:20.870 回答
0

如果您认为public static void main(String[]a) {System.out.println(4613732);} 作弊,那么不乱用奇数怎么样?

public static void main(String[] args) {
    int f,s,t=s=2,n=8;
    for(;n<4000000;t+=n,f=s,s=n,n=f+4*s);
    System.out.println(t);
}
于 2018-01-16T10:56:40.490 回答