Подсчет количества чисел Фибоначчи в заданной числовой последовательности. - C (СИ)
Формулировка задачи:
Дано 100 чисел от 1 до 50. Определить, сколько среди них чисел Фибоначчи и сколько чисел, первая значашая цифра в десятиричной записи которых 1 или 2.
Решение задачи: «Подсчет количества чисел Фибоначчи в заданной числовой последовательности.»
textual
Листинг программы
#include <stdio.h>
int ChkFib(int *A,int n)
{
int max,i,curr,prev,c;
max=A[0];
for(i=1;i<n;i++) if (A[i] > max) max=A[i];
curr=1;
prev=1;
c=0;
while (1)
{
if (curr > max) break;
for (i=0; i<n; i++)
if (A[i]==curr)
{
c++;
printf("%d ",curr);
break;
}
i=curr+prev;
prev=curr;
curr=i;
}
return c;
}
int main(int argc, char* argv[])
{
int Arr[8]={1,2,9,23,13,8,51,120};
printf("\n %d \n",ChkFib(Arr,8));
return 0;
}
Объяснение кода листинга программы
- Включаем стандартную библиотеку ввода-вывода
- Объявляем функцию ChkFib, которая принимает на вход массив A и его размер n
- Инициализируем переменные: max — для хранения максимального числа в массиве A i — счётчик для цикла по массиву A curr — текущее число в цикле prev — предыдущее число в цикле c — счётчик для подсчёта чисел Фибоначчи
- Находим максимальное число в массиве A с помощью цикла for
- Инициализируем значения переменных curr, prev, c, а также устанавливаем флаг для выхода из цикла while
- Запускаем цикл while, который будет выполняться до тех пор, пока текущее число curr меньше или равно максимальному числу в массиве A
- Внутри цикла while проверяем каждый элемент массива A на равенство текущему числу curr
- Если число найдено, увеличиваем счётчик c и выводим текущее число и его индекс в формате
curr %d - Обновляем значения переменных curr, prev, c и i
- В конце функции возвращаем значение счётчика c
- В функции main создаём массив Arr и инициализируем его значениями
- Вызываем функцию ChkFib, передавая в неё массив Arr и его размер
- Выводим результат работы функции ChkFib на экран
- Завершаем программу