Определить количество первых чисел фибоначчи, таких что их сумма не превышает int - C (СИ)
Формулировка задачи:
Как составить программу, которая считает сумму первых K чисел фибоначчи (K-задается пользователем) и определить количество первых чисел фибоначчи, таких что их сумма не превышает int (long int)
Решение задачи: «Определить количество первых чисел фибоначчи, таких что их сумма не превышает int»
textual
Листинг программы
#include <stdio.h>
#include<conio.h>
int fibonacci_numbers(int k) {
int sum = 0, count = 3,current = 0, prev = 1, prev2 = 0;
sum = prev;
if(k == 1)
return 0;
while(count++ <= k) {
current = prev + prev2;
prev2 = prev;
prev = current;
sum += current;
}
return sum;
}
int count(long inp_sum) {
int count = 1, prev = 1, prev2 = 0, sum = 0, current = 0;
sum = prev;
if(inp_sum == 0)
return 0;
if(inp_sum == 1)
return 1;
if(inp_sum == 2)
return 2;
if(inp_sum == 3)
return 3;
while(sum < inp_sum) {
current = prev + prev2;
prev2 = prev;
prev = current;
sum += current;
count++;
}
return count;
}
int main ()
{
int k = 10;
printf("Fibbonacci sum of numbers: %d\n", fibonacci_numbers(k));
long sum = 33;
printf("Count: %d\n", count(sum));
getch();
return 0;
}
Объяснение кода листинга программы
- В функции
fibonacci_numbersначальные значения переменныхsum,count,current,prevиprev2инициализируются перед циклом. - Переменная
sumинициализируется значениемprev, что в свою очередь инициализируется значением 1, так как первые две числа последовательности Фибоначчи равны 1. - Если
kравно 1, функция возвращает 0. - Если
kбольше 1, то выполняется цикл, в котором текущее значениеcurrentравно сумме предыдущего значенияprevи второго предыдущего значенияprev2. - Значения
prev2,prevиcurrentобновляются на каждом шаге цикла. - Значение
sumувеличивается на текущее значениеcurrentна каждом шаге цикла. - Цикл выполняется, пока значение
sumне станет равнымk. - Функция возвращает значение
sum. - В функции
countначальные значения переменныхsum,count,prev,prev2иcurrentинициализируются перед циклом. - Переменная
sumинициализируется значениемprev, что в свою очередь инициализируется значением 1, так как первые два числа последовательности Фибоначчи равны 1. - Если
inp_sumравно 0, функция возвращает 0. - Если
inp_sumравно 1, функция возвращает 1. - Если
inp_sumравно 2, функция возвращает 2. - Если
inp_sumравно 3, функция возвращает 3. - Если
inp_sumбольше 3, выполняется цикл, в котором текущее значениеcurrentравно сумме предыдущего значенияprevи второго предыдущего значенияprev2. - Значения
prev2,prevиcurrentобновляются на каждом шаге цикла. - Значение
sumувеличивается на текущее значениеcurrentна каждом шаге цикла. - Цикл выполняется, пока значение
sumне станет равнымinp_sum. - Функция возвращает значение
count. - В функции
mainинициализируются переменныеkиsum. - Вызывается функция
fibonacci_numbersс аргументомk, и результат выводится на экран. - Вызывается функция
countс аргументомsum, и результат выводится на экран.