2013-03-16 3 views
-1

Проблема:числа Фибоначчи Даже в C, головоломке

Каждый новый член в последовательности Фибоначчи генерируется путем сложения двух предыдущих терминов. Начиная с 1 и 2, первые 10 условия будут:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Рассматривая условия в последовательность Фибоначчи, значения которой не превышают четырех миллионов, найдет сумму четных членов.

Я искал другой способ сделать это, но я смущен, почему мой метод не работает. Я включил код, а также мой написанный алгоритмический процесс под ним. Независимо от того, какой диапазон итераций значения k выбирает (4000000 или 10), я всегда получаю тот же ответ: 4200784. Спасибо за помощь.

#include <stdio.h> 

int main() 
{ 
long int sum; 
sum = 0; 
long int i; 
i = 1; 
long int j; 
j = 2; 
long int k; 

while(k<4000000) 
{ 
    k = i + j; 
    if(k%2==0) 
     sum +=k; 
    i = j; 
    j = k; 

} 
printf("%d",sum); 
return 0; 
} 

//Step 0//For the initial conditions [i][j]=[1][2] 
//Step 1//Find the value of i + j. 
//Step 2//Find out if the solution is even by dividing by modulus 2. 
//Step 3//If even, add the solution to the sum. 
//Step 4//Replace the value of i with j, and replace the value of j with the new sum. 
//Repeat Steps 1-4 while i + j < 4,000,000 
//1, 2, 3, 5, 8, 13, 21, 34 
+0

Вы действительно имеете в виду 'i + j == k;'? – teppic

+0

ну, 'sum' не инициализируется, и вы никогда не назначаете ему –

+0

@teppic Я в замешательстве. Разве это не то, что у меня есть? –

ответ

2

Я считаю, что ваш ищет

sum += k; 

не

k+=sum; 

Вы также должны исправить это и поместить его внутри время цикла

k = i + j; 

Примечание: вы должны также инициализировать сумму до 0

+0

не забывайте, что 'sum' никогда не инициализируется до нуля –

+0

Да, не поймал это, спасибо –

+0

Ничего себе, спасибо @Corvin. Это еще не правильный ответ, но я продолжу играть с этим. Я рад, что я не был абсолютно сумасшедшим в своем подходе. –

1

Вы никогда не инициализируете свою переменную 'k'. В этом первом тесте «while» у вас есть неопределенное значение для «k», поэтому все ставки отключены.