Cerința
Considerăm următorul șir, în care n
este un număr natural nenul: fn=⎧⎩⎨032⋅fn−1–fn−2+2dacă n=1,dacă n=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,10
9
]
, 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
Fișierul de intrare pozitiiconsecutive.in
conține pe prima linie numerele x y
.
Date de ieșire
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
0 ≤ x < y ≤ 10
9
- proiectați un algoritm eficient din punctul de vedere al timpului de executare și al memoriei utilizate;
- se recomandă o soluție care să nu folosească tablouri sau alte structuri de date similare.
Exemplu
pozitiiconsecutive.in
48 63
pozitiiconsecutive.out
63 48 35 24 15 8 3 0
#include <bits/stdc++.h> using namespace std; ifstream cin("pozitiiconsecutive.in"); ofstream cout("pozitiiconsecutive.out"); int main() { int x , y , z; z=9; cin >> x >> y; cout << y << ' ' << x << ' '; while(z > 8) { z = 2 * x - y + 2; cout << z << ' '; y = x , x = z; } cout << 3 << ' ' << 0; return 0; }