我想从Project Euler#2编写练习算法。这是练习:
“Fibonacci序列中的每个新术语都是通过添加 前两个任期。从1和2开始,前10个术语将 是:
1,2,3,5,8,13,21,34,55,89,......
考虑Fibonacci序列中的值,而不是 超过四百万,找到偶数值的总和。“
这是我的算法:
public class FibonacciSum {
public static void main(String[] args) {
int a = 0;
int b = 2;
int sum = a + b;
while (a < 4000000 && b < 4000000){
a += b;
if (a < 4000000){
sum = a + sum;
b += a;
if (b < 4000000){
sum = b + sum;
}
}
}
System.out.println(sum);
}
}
程序计算答案:7049154
但欧拉说这是错误的答案。我尝试了几种方法,但没有成功。
请告诉我,我哪里做错了?
答案 0 :(得分:0)
您的代码有几个问题:
1)首先,您选择了错误的起始值。您最终得到以下序列0,2,4,6,10 ...... 2)你只需要总结偶数。 3)您的代码过于复杂。试着找到一个小于四百万的斐波纳契数。然后只需添加求和
答案 1 :(得分:-3)
你走了;)
#include <stdio.h>
int main(void) {
int g=0,h=0,v=1,i=1;
while (i<4000000) {
if ((~i & 1)) h+=i;
g = v;
v = i;
i = g + v;
}
printf("> %d \n",h);
return 0;
};