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

Buna!
Cum pot gasi cifre, care au proprietatea ca in scrierea binara sunt formate doar din 1?


boiustef: nu cifre, ci numere se caută şi acestea sunt precedentele puterilor lui 2, de exemplu: 1, 3, 7, 15, 31, 63, ... care sunt precedentele lui 2, 4, 8, 16, 32, ...
boiustef: dacă concretizezi enunţul... câte numere cauţi sau până la care număr...
boiustef: sau întrebarea e ruptă din alt enunţ?
sikesjack1: da, Determinaţi lungimea maximă a unei secvenţe de numere din şir cu proprietatea că în scrierea binară sunt formate doar din cifre de 1. Si voiam sa stiu cum sa fac un algoritm care sa imi gaseasca acele numere?
boiustef: la concret, e de pe pbinfo? dă numele sau nr
boiustef: am gasit. Secventa1, da?
boiustef: secventa11

Răspunsuri la întrebare

Răspuns de daba
0

Răspuns:

Explicație:

declari un x de tip int, long sau ce vrei tu (vezi doar sa nu fie real, gen float sau double, etc)

aplici modul lui x, adica inmultesti cu -1 sau faci abs(x) (asta e in c++)

iei o variabila de acelasi tip ca x si o initializezi cu 1, o variabila m de exemplu

si faci un while m < x

siftezi m in stanga cu o pozitie si aduni un 1 lui m // adica m = m << 1; m++;

acum ar trebui ca m sa fie egal cu x

daca m nu e egal cu x, atunci x e mai mic decat m pentru ca x contine cel putin un 0.

(asta merge doar pe cazul in care numarul se considera scris in binar doar din 1 atunci cand se testeaza de la primul 1, adica in binar 0 0 0 0 0 1 1 1 1 1 e considerat scris doar din 1, pe cand 0 0 0 0 0 1 0 1 1 1 nu e

Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

int n, num, i, secv, L;

bool numai1(int x)

{

   if (x==0) return false;

   else

   {

       while (x)

       {

           if (x%2==0) {return false;}

           else x/=2;

       }

       return true;

   }

}

int main()

{

   cin >> n;

   for (i=1; i<=n; ++i)

   {

       cin >> num;

       if (numai1(num)) ++secv;

       else

       {

           if (secv>L) {L=secv; secv=0;}

       }

   }

   cout << L;

}

Explicație:

cred cunoşti conversia binară a unui număr zecimal prin împărţiri repetate la 2


sikesjack1: nu il cunosc, acuma incerc sa invat de pe yt :))
sikesjack1: si fac pe foaie
boiustef: succes!
Alte întrebări interesante