Давайте определим последовательность Фибоначчи как
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
Итак, мы имеем бесконечную последовательность 1,2,3,5,8,13,
... Хорошо известно, что любое положительное целое число может быть записано как сумма некоторых чисел Фибоначчи. Единственное предостережение в том, что это суммирование может быть не уникальным. Всегда есть хотя бы один способ записать число в виде суммы чисел Фибоначчи, но их может быть намного больше.
Ваша задача - написать полную программу, которая с использованием stdin принимает положительное целое число от одного до миллиона включительно, а затем выводит с использованием stdout все возможные суммы сумм Фибоначчи, которые суммируют до входных данных. Суммируя, числа Фибоначчи не должны повторяться, и это включает число 1
. При любом суммировании, если 1
оно присутствует, оно должно присутствовать только один раз, поскольку в моем определении приведенная выше последовательность 1
встречается только один раз. Суммы с единственным термином действительны, поэтому, если входное число является самим числом Фибоначчи, то само число является действительным суммированием и должно быть напечатано. Если несколько сумм, то между любыми двумя суммами должна быть пустая строка, чтобы их можно было легко различить.
Вот несколько примеров.
./myfib 1
1
Существует только одна такая сумма, и у нее есть только термин, так что это все, что напечатано.
./myfib 2
2
Обратите внимание, что 1+1
это неверная сумма, потому что 1
повторяется.
./myfib 3
1+2
3
Две суммы, и они оба напечатаны с пустой строкой между ними.
./myfib 10
2+8
2+3+5
./myfib 100
3+8+89
1+2+8+89
3+8+34+55
1+2+3+5+89
1+2+8+34+55
3+8+13+21+55
1+2+3+5+34+55
1+2+8+13+21+55
1+2+3+5+13+21+55
Настоящий код-гольф. Самый короткий код на любом языке выигрывает. Пожалуйста, опубликуйте свой код с некоторыми тестовыми примерами (кроме того, который я дал выше). В случае галстуков, я выбираю ту, которая получила наибольшее количество голосов после ожидания, по крайней мере, в течение двух недель и, возможно, дольше. Поэтому сообщество, пожалуйста, не стесняйтесь высказать любые решения, которые вам нравятся. Хитрость / красота кода важнее, чем то, кто публикуется первым.
Удачного кодирования!