项目欧拉2# - 奇怪的输出

时间:2016-10-14 22:34:13

标签: c

我试图用C中的Project Euler解决问题2.这是我想到的第一个可能的解决方案,实际上,它给出了正确答案的输出。问题是,每次运行我的程序时,它都会给我一个不同的输出,即" 2"或" 4613732"这是正确的答案。抱歉我的英语不好,你能帮我找出错误吗?

#include <stdio.h>
int main(){
  int n, n1 = 1, n2 = 2, sum = 2;
  while(n<4000000){
     n = n1 + n2; /*calculate the next number of the series*/
     n1 = n2;
     n2 = n;
     if(n%2 == 0){
        sum = sum + n; /*if the number it's even add it to the main sum*/
      }
    }
    printf("The sum is %d\n", sum);
}

2 个答案:

答案 0 :(得分:2)

您没有初始化n;当你得到正确的答案时,这意味着你很幸运。

答案 1 :(得分:1)

#include <conio.h>
#include <iostream>

using namespace std;


int evenFibSum(int i=1,int j=2)
{
    const int max = 3999999;
    int eventsum = 2;
    int sum = 0;
    while (sum < max)
    {
        sum = i + j;
        i = j;
        j = sum;

        if (sum % 2 == 0)
            eventsum +=sum;
    }
    return eventsum;
}

为了更有效的解决方案,请应用以下逻辑

Fibbonaci Series =>  1   2  3  5  8  13  21  34  55  89 144
Index            =>  0   1  2  3  4  5   6    7   8   9  10

为了获得均匀的fibbonanci,我必须添加以下索引值[1 4 7 10] 在这里,我感觉到一些模式

[1 4 7 10] =&gt;我需要提前指数3

所以如何将指数推进3

//  k = i+j = > 3  13  55
//  i = k+j  => 5  21  89
//  j = k+i  => 8  34  144

int evenFibSumx(int i=1,int j=2)
{
    const int max = 3999999;
    int eventsum = 2;
    int k= 0;
    while (1)
    {
        k = i + j;
        i = k + j;
        j = k + i;
        if(i >= max)
            break;
        if (j%2 == 0)
            eventsum +=j;
    }
    return eventsum;
}


int main()
{
     std::cout << evenFibSum();
     std::cout << evenFibSumx();

}