Informatică, întrebare adresată de Andreiutz26, 8 ani în urmă

Fie data o piramida ca cea din poza unde fiecare numar are exact 2 "fii" (numarul x are fii 2*x si 2*x + 1). Realizati un program care daca se introduce un numar y ( y <= 100 ), sa returneze numărul rândului pe care se afla in piramida.
Exemplu in poza.

Anexe:

uleiaalex: Cand ajung acasa scriu programul. E foarte usor.
Andreiutz26: Da dar fara a face un for pana la numarul respectiv. O formula sau ceva...
uleiaalex: incerc
albastruverde12: Se poate gasi o formula matematica: Primul element de pe linia k este 2^(k-1). Ultimul element de pe linia k este primul de pe linia (k+1) din care scadem 1 (adica 2^k - 1). Deci conditia ca un numar x sa fie pe linia k este 2^(k-1)<=x<2^k. Iar formula ar fi [log_2(x)]=k, insa nu cred ca formula ajuta, ci mai degraba conditia.
albastruverde12: Rectific: [log_2(x)]=k-1.
Andreiutz26: mulțumesc mult!

Răspunsuri la întrebare

Răspuns de ArMyFoRHeLL
1
Pentru a deduce mai usor formula (sau cel putin e mai usor pentru mine),am facut un algoritm.
#include <iostream>

using namespace std;

int main()
{
    int y,k=1;
    cin>>y;
    while(y!=1)
    {
        k++;
        y=y/2;
    }
    cout<<k;
    return 0;
}
Oricum formula ar fi log2 y +1=k.


Alte întrebări interesante