Définissons la séquence de Fibonacci comme
F(1) = 1
F(2) = 2
F(n) = F(n - 2) + F(n - 1)
Nous avons donc la séquence infinie 1,2,3,5,8,13,
... Il est bien connu que tout entier positif peut être écrit comme une somme de quelques nombres de Fibonacci. La seule mise en garde est que cette sommation n'est peut-être pas unique. Il existe toujours au moins une façon d'écrire un nombre sous la forme d'une somme de nombres de Fibonacci, mais il peut y en avoir beaucoup plus.
Votre défi est d'écrire un programme complet qui, à l'aide de stdin, prend un entier positif compris entre un et un million inclus, puis génère à l'aide de stdout toutes les sommations possibles des nombres de Fibonacci qui résument à l'entrée. En résumé, les nombres de Fibonacci ne doivent pas se répéter et cela inclut le nombre 1
. Dans toute sommation, s'il 1
est présent, il ne doit être présent qu'une seule fois car dans ma définition de la séquence ci-dessus 1
n'apparaît qu'une seule fois. Les sommations avec un seul terme sont valides donc si le numéro d'entrée est un nombre de Fibonacci lui-même, alors le nombre lui-même est une sommation valide et doit être imprimé. Si plusieurs sommes, alors entre deux sommes, il doit y avoir une ligne vierge pour les distinguer facilement.
Voici quelques exemples.
./myfib 1
1
Il n'y a qu'une seule telle somme et elle n'a qu'un terme, c'est tout ce qui est imprimé.
./myfib 2
2
Notez ici que ce 1+1
n'est pas une somme valide car elle se 1
répète.
./myfib 3
1+2
3
Deux sommes et elles sont toutes les deux imprimées avec une ligne vierge entre les deux.
./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
Véritable golf de code. Le code le plus court dans n'importe quelle langue gagne. Veuillez poster votre code avec quelques cas de test (en plus de celui que j'ai donné ci-dessus). En cas d'égalité, je choisis celui qui a le plus de votes positifs après avoir attendu au moins deux semaines et probablement plus. Alors, la communauté, n'hésitez pas à voter pour toutes les solutions que vous aimez. L'intelligence / la beauté du code importe beaucoup plus que celui qui publie en premier.
Bon codage!