👤

Se consideră șirul 1, 3, 7, 13, 21, 31, 43 ... definit astfel: f0=1, iar fn=fn-1+2n, dacă n≥1 (unde n

este un număr natural).

Se citesc de la tastatură două numere naturale din intervalul [1,109], x și y (x<y), reprezentând doi

termeni aflați pe poziții consecutive în șirul dat, și se cere să se scrie în fișierul text bac.out, separați

prin câte un spațiu, toți termenii șirului mai mici sau egali cu y, în ordine inversă a apariției lor în șir.

Proiectați un algoritm eficient din punctul de vedere al spațiului de memorie și al timpului de executare.

Exemplu: dacă x=21 și y=31, fişierul conţine valorile

31 21 13 7 3 1​


Răspuns :

Răspuns:

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

   ofstream f("bac.out");

   int x = 21, y = 31;

   int n = (y - x) / 2;

   f << y << " " << x << " ";

   n -= 1;

   int numar;

   int numar_precedent = x;

   for (int i = n; i > 0; i--)

   {

       numar = numar_precedent - 2 * i;

       f << numar << " ";

       numar_precedent = numar;

   }

   

   f.close();

   return 0;

}

Explicație: