我的算法出了点问题

时间:2017-03-26 13:48:46

标签: java

我想从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 但欧拉说这是错误的答案。我尝试了几种方法,但没有成功。 请告诉我,我哪里做错了?

2 个答案:

答案 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;
};