fbpx

Problema #806 – Generare – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se consideră şirul definit mai jos:

fn={1dacă n=11+fn1dacă n par1+2fn2altfel

î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;
}
Comentarii

S-ar putea sa iti placa