Сформировать непрямоугольную матрицу, i-ая строка которой содержит числа Фибоначчи - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, требуется помощь в решение задачи. Для меня она не очевидна. Буду очень благодарен. Из входного потока вводится последовательность целых неотрицательных чисел {ai}, i = 1, …, m. Значение m заранее не известно и вводится из входного потока. Сформировать непрямоугольную матрицу, i-ая строка которой содержит числа Фибоначчи, сумма которых равна i-му исходной последовательности, причем каждое число Фибоначчи входит в сумму не более одного раза (известно, что любое целое число можно представить в виде суммы чисел Фибоначчи). Числа Фибоначчи определяются следующим соотношением: Ф0 = 0, Ф1 = 1, Фi-1 + Фi-2, i=2,3,4… . Исходную последовательность и полученную матрицу вывести в выходной поток с необходимыми комментариями.
Т.е поясню ряд Фибоначчи 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ... Например Входные данные водятся пользователем: 5 18 23 98 44 62 Выходные данные выводятся программой в виде непрямоугольной матрицы: 5 13 + 5 21 + 2 89 + 8 + 1 34 + 8 + 2 55+5+2

Решение задачи: «Сформировать непрямоугольную матрицу, i-ая строка которой содержит числа Фибоначчи»

textual
Листинг программы
long FibMax(long n)  // Нахождения максимального фибоначча <=n
{ lon F1, F2, T;
  for(F1=F2=1; F2<=n; ) {
    T = F2;
    F2 = F1 + T;
    F1 = T;
  }
  return F1;
}
// Разложение для long a
for(i = 0;a;i++) {
  if (i) printf("+")
  long F = FiibMax(a);
  printf("%ld", F);
  a -= F;
}
printf("\n");

Объяснение кода листинга программы

Код решает задачу разложения числа на сумму чисел Фибоначчи, используя функцию FibMax, которая находит максимальное число Фибоначчи, не превышающее заданное число n. В основной функции, после цикла, который находит максимальное число Фибоначчи, меньшее или равное a, выполняется разложение числа a на сумму чисел Фибоначчи с помощью цикла. При этом выполняется условие: если i не равно 0, то выводится плюс, а затем значение F, полученное из функции FibMax, и число a уменьшается на это значение. Если a не равно 0, то процесс повторяется до тех пор, пока a не станет равным нулю. В конце выводится результат разложения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы