# PBinfo #3162 – cifre_bin_back – Rezolvare C++

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

## Enunț

Cerința
Se dă un număr natural n. Afișați în ordine lexicografică toate secvențele de cifre binare care au atâtea cifre de 0 și atâtea cifre de 1 câte are reprezentarea binară a lui n.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieșire
Programul va afișa pe ecran combinațiile de cifre binare cerute, câte una pe fiecare rând.

Restricții și precizări

1 ≤ n ≤ 2.000.000

Exemplu:
Intrare

17
Ieșire

00011
00101
00110
01001
01010
01100
10001
10010
10100
11000
Explicație
Numărul n are reprezentarea binară 10001, deci se generează combinațiile cu 3 cifre de 0 si 2 cifre de 1.

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int X[31],c0,c1,n;
void afisare()
{
    for(int i=1;i<=n;i++)
        cout<<X[i];
    cout<<"\n";
}
int ok(int k)
{
    int cc0=0,cc1=0;
    for(int i=1;i<=k;i++)
        if(X[i]==0) cc0++;
        else cc1++;
    if(cc0>c0 || cc1>c1) return 0;
    return 1;
}
void back(int k)
{
    for(int i=0;i<=1;i++)
    {
        X[k]=i;
        if(ok(k))
        {
            if(k==n) afisare();
            else back(k+1);
        }
    }
}
int main()
{
    cin>>n;
    while(n)
    {
        if(n%2) c1++;
        else c0++;
        n=n/2;
    }
    n=c0+c1;
    back(1);
    return 0;
}
```

## Resurse

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