Автор Тема: Задача на ряд Фибоначчи  (Прочитано 3368 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Winger

  • Гость
Задача на ряд Фибоначчи
« : 06 Ноября 2015, 14:13:55 »
Учу язык программирования, нашел такую задачу из проекта Эйлера:
Найдите сумму всех чётных элементов ряда Фибоначчи, которые не превышают четыре миллиона.
Последовательность Фибоначи это последовательность вида 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... в которой каждое последующее число равно сумме двух предыдущих чисел.
В интернете нашел такое решение данной задачи, но не могу понять, что автор здесь намудрил?!

#include <stdio.h>
#include <stdlib.h>
 
 int main(int argc, char *argv[])
 {
   float i; //Переменная для цикла
   int fibbonachi[10000], tmp=0, summa=0;
 
   for(i = 1; i <= 40;i++)
            if (i == 1 || i == 2)
               {
                 fibbonachi[tmp]=i;
                 tmp++;
               }
            else
                {
                 fibbonachi[tmp] = fibbonachi[tmp-2]+fibbonachi[tmp-1];
                 tmp++;
                 //printf("%.0f\n", i);
                }
   for (tmp=0; tmp<=40; tmp++)
       if (fibbonachi[tmp]<=4000000)
          {
           printf("%d\n", fibbonachi[tmp]);   //Печатаем все числа фиббоначи, которые не превышают 4 миллиона
           if (fibbonachi[tmp] % 2 == 0)
                     summa +=  fibbonachi[tmp];
          }
 
   printf("Сумма всех четных элементов ряда Фиббоначчи, которые не превышают четыре миллиона: %d\n", summa);
   system("PAUSE"); 
   return 0;
 }

Получается такой вывод:
Цитировать
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
0
Сумма всех четных элементов ряда Фиббоначчи, которые не превышают четыре миллиона: 4613732

Например, почему у него два цикла фор до 40, что они значат и почему до 40, а не до 20 или скажем до 50?
Почему числа выводятся с двойки, куда делись ноль и одна единица в начале?
Почему после последнего числа перед конечной суммой 4613732 снова выводится ноль?
Для чего в конце стоит это system("PAUSE"); 
Кто-нибудь может прояснить ситуацию?  ???

 

Altinbex

  • Гость
Задача на ряд Фибоначчи
« Ответ #1 : 08 Ноября 2015, 22:56:06 »
Автор реально что-то намутил. Похоже он сначала выбирает все числа ряда в массив, а потом уже складывает и выводит их на экран. Не понимаю, зачем такие сложности, всё можно сделать гораздо проще.

#include <stdio.h>
#include <stdlib.h>

int main()
{
int sum = 0;
int max = 4000000;
int prev = 0;
int curr = 1;
int next = 1;
while( next <= max )
    {
if(next%2==0)
sum += next;
prev = curr;
curr = next;
printf("%d\n",prev);
next = prev + curr;

}
printf("\n\n");
printf("Summa chisel = %d\n\n",sum);
return 0;
}

Правда у меня тоже 0 в начале не выводится..
 

jounik

  • Гость
Задача на ряд Фибоначчи
« Ответ #2 : 11 Марта 2016, 12:00:11 »

Предложу свой вариант решения Фибоначчи, еще более короткий  :)
Цитировать
#include <stdio.h>
#include <stdlib.h>


int main()
{
    long int F1=1,F2=2,F=3;
    long int S=2;
    do {
        F=F1+F2;
        if (F%2==0) S+=F;
        F1=F2;
        F2=F;
    }
        while (F<=4000000);

   printf("Summa chisl Fibonach  =  %ld\n",S);

system("pause");
return 0;
}
 

DrOffset

  • Гость
Задача на ряд Фибоначчи
« Ответ #3 : 18 Марта 2016, 15:24:37 »
А вот мой код, суровый и безпощадный, пойдет))


#include <stdio.h>

int main()
{
    int i;
    int sum = 0;
    for (i = 0; i <= 4000000; i++)
    {
    if(i%2==0)
    {

        sum = sum + i;
    }

    else {continue;}
    }
    return (0);
}
 

mishanqa

  • Гость
Задача на ряд Фибоначчи
« Ответ #4 : 20 Марта 2016, 14:09:33 »
Конечно же нет)) Где у вас проверка на ряд Фибоначчи? Вы просто выведете сумму всех четных чисел от 0 до 4 млн.
 

 

В быстром ответе можно использовать BB-теги и смайлы.

Имя: E-mail: