我对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);
}
}
我添加了空格以便于阅读。
如何缩短(或更正)?
答案 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);
}