2820 - Sir11
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>