fbpx

Problema #2793 – PozitiiConsecutive – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Considerăm următorul șir, în care n este un număr natural nenul: fn=032fn1fn2+2dacă n=1,dacă n=2,dacă n>2.fn={0dacă n=1,3dacă n=2,2fn1fn2+2dacă 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

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 ≤ 109
  • 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;
}
Comentarii

S-ar putea sa iti placa