Сформировать непрямоугольную матрицу, 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 не станет равным нулю. В конце выводится результат разложения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д