2793 - Pozitii consecutive

From Bitnami MediaWiki

Cerință[edit | edit source]

Considerăm următorul șir, în care n este un număr natural nenul:
fn = 0, daca n=1
fn = 3, daca n=2
fn = 2⋅fn−1–fn−2+2, dacă n>2.

Primii termeni ai acestui șir sunt: 0, 3, 8, 15, 24, 35, 48, 63, 80 ....

Se citesc două numere naturale din intervalul [0,109], x și y, reprezentând valorile a doi termeni aflați pe poziții consecutive în șirul dat (x<y), și se cere să se afișeze, în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii șirului mai mici sau egali cu y.

Date de intrare[edit | edit source]

Fișierul de intrare pozitiiconsecutive.in conține pe prima linie numerele x y.

Date de ieșire[edit | edit source]

Fișierul de ieșire pozitiiconsecutive.out va conține pe prima linie în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii șirului mai mici sau egali cu y.

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∈[1,10 9 ]

Exemplu[edit | edit source]

Date de intrare: pozitiiconsecutive.in : 48 63
Date de ieșire: pozitiiconsecutive.out : 63 48 35 24 15 8 3 0

Rezolvare[edit | edit source]

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

   citire_fisier = open("pozitiiconsecutive.in" , "r")
   scriere_fisier = open("pozitiiconsecutive.out" , "w")
   x = int(citire_fisier.readline().strip())
   y = int(citire_fisier.readline().strip())
   z = 9
   scriere_fisier.write(str(y))
   scriere_fisier.write(' ')
   scriere_fisier.write(str(x))
   scriere_fisier.write(' ')
   while(z > 8):
       z = 2 * x - y + 2
       scriere_fisier.write(str(z))
       scriere_fisier.write(' ')
       y = x
       x = z
   scriere_fisier.write('3')
   scriere_fisier.write(' ')
   scriere_fisier.write('0')

</syntaxhighlight>