0257 - Descompunerea unui numar in termeni Fibonacci

From Bitnami MediaWiki

Cerință[edit | edit source]

Se dă un număr natural n.
Să se descompună în sumă cu număr minim de termeni ai şirului lui Fibonacci.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul n.

Date de ieșire[edit | edit source]

Programul afișează pe ecran, separaţi prin câte un spaţiu, termenii descompunerii, în ordine descrescătoare.

Restricții și precizări[edit | edit source]

1 ≤ n ≤ 1.000.000.000

Exemplu[edit | edit source]

Date de intrare: 30
Date de ieșire: 21 8 1

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def fib(n):

   f1, f2 = 1, 1
   while f1 + f2 <= n:
       f3 = f1 + f2
       f1 = f2
       f2 = f3
   return f2

if __name__ == "__main__":

   n = int(input())
   while n != 0:
       print(fib(n), end=' ')
       n = n - fib(n)

</syntaxhighlight>