2820 - Sir11

From Bitnami MediaWiki

Cerință[edit | edit source]

Se consideră șirul 1, -1, 2 … definit astfel: f1=1, f2=−1, iar fn=1−2⋅fn−1−fn−2

, dacă n≥3 (unde n este un număr natural).

Se citește un număr natural, n (n∈[1,10 9 ]), și se cere să se afișeze, separați prin câte un spațiu, primii n termeni ai șirului, în ordine inversă apariției lor în acesta.

Date de intrare[edit | edit source]

Fișierul de intrare sir11.in conține pe prima linie numărul n.

Date de ieșire[edit | edit source]

Fișierul de ieșire sir11.out va conține pe prima linie, separați prin câte un spațiu, primii n termeni ai șirului, în ordine inversă apariției lor în acesta.

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

Pentru determinarea și afișarea numerelor cerute se utilizează un algoritm eficient din punctul de vedere al spațiului de memorie și al timpului de executare; se recomandă evitarea memorării numerelor într-un tablou sau în altă structură de date similară în enunțul original, n∈[1,10 9 ]; datorită dimensiunilor fișierelor obținute, limita maximă a lui n a fost redusă;

Exemplu[edit | edit source]

Date de intrare: sir11.in : 3
Date de ieșire: sir11.out : 2 -1 1

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> if __name__ == "__main__":

   citire_fisier = open("sir11.in", "r")
   scriere_fisier = open("sir11.out", "w")
   n = int(citire_fisier.readline().strip())
   f1 = 1
   f2 = -1
   for i in range(3, n + 1):
       f3 = 1 - 2 * f2 - f1
       if i != n:
           f1 = f2
           f2 = f3
   for i in range(n + 1, 3, -1):
       scriere_fisier.write(str(f3))
       scriere_fisier.write(' ')
       f1 = 1 - 2 * f2 - f3
       f3 = f2
       f2 = f1
   scriere_fisier.write('-1 ')
   scriere_fisier.write('1')

</syntaxhighlight>