项目欧拉甚至斐波那契

时间:2013-03-08 04:23:21

标签: java

我对Euler第二个问题项目的最短解决方案感兴趣:甚至是Java中的Fibonacci数字。

  

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的。从1和2开始,前10个术语将是:   1,2,3,5,8,13,21,34,55,89 ......   通过考虑Fibonacci序列中的值不超过四百万的项,找到   偶数项的总和。

我现在所拥有的:

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);
   }
}

我添加了空格以便于阅读。

如何缩短(或更正)?

2 个答案:

答案 0 :(得分:1)

对此最佳解决方案可能是创建一个Fibonnaci数组。用计数器创建一个循环。至少迭代,计算下一个数字并将其推入阵列。请记住,由于F(n)= F(n-1)+ F(n-2),并且您已经计算并保存了F(n-1),F(n-2),这将是一个简单的补充。如果此数字超出限制,请退出循环。

现在迭代遍历数组添加其他所有数字(这将是偶数)。

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

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

答案 1 :(得分: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);
}