Cerinţa
Se consideră şirul definit mai jos:
fn={1dacă n=11+fn−1dacă n par1+2⋅fn−2altfel
î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
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; while(n > 1){ cout << n << ' '; if(n % 2 == 1) n = n / 2 + 1; else n--; } cout << 1 << ' '; return 0; }