我试图用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);
}
答案 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();
}