# PBinfo #806 – Generare – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerinţa
Se consideră şirul definit mai jos:

$$  f_n = \begin{cases}
1& \text{dacă } n = 1\\
1 + f_{n-1} & \text{dacă } n \text{ par} \\
1 + 2 \cdot f_{n-2} & \text{altfel}
\end{cases} $$

în care nu există doi termeni cu aceeași paritate aflați pe poziții consecutive: 1, 2, 3, 4, 7, 8, 15, 16 .....

Pentru un număr natural x, termen al şirului dat, se cere să se afișeze pe ecran, în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu x.

Date de intrare
Programul citeşte de la tastatură numărul x

Date de ieşire
Programul va afişa pe ecran în ordine strict descrescătoare, separați prin câte un spațiu, toţi termenii şirului care sunt mai mici sau egali cu x.

Restricţii şi precizări

1 ≤ x ≤ 1.000.000.000

Exemplu:
Date de intrare

15
Date de ieşire

15 8 7 4 3 2 1

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int main(){
	int x;
	cin >> x;
	while(x > 1)
	{
		cout << x << " ";
		if(x % 2 == 1)
			x = x / 2 + 1;
		else
			x --;
	}
	cout << 1;
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/806)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/806/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-806/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
