2820 - Sir11

From Bitnami MediaWiki
Revision as of 18:01, 7 January 2023 by Heres.Gabriela (talk | contribs) (Pagină nouă: == Cerință == 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<sup> 9 </sup>]), ș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 == Fișierul de intrare sir11.in conține pe prima linie numărul n. == Date de ieșire == Fi...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>