252
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.
#include <bits/stdc++.h> using namespace std; int n , m , x[30] , p[30] , cnt , a[30] , c1 , c0; int afisare() { for(int i = 1 ; i <= cnt ; i++) cout << x[i]; cout << '\n'; } int valid(int k) { int c00 = 0 , c11 = 0; for(int i = 1 ; i <= k ; i++) if(x[i] == 0) c00++; else c11++; if(c00 <= c0 && c11 <= c1) return 1; else return 0; } void back(int k) { for(int i = 0 ; i <= 1 ; i++) { x[k] = i; if(valid(k)) { if(k == cnt) afisare(); else back(k + 1); } } } int main() { cin >> n; while(n != 0) { a[++cnt] = n % 2; n /= 2; } for(int i = 1 ; i <= cnt ; i++) { if(a[i] == 0) c0++; else c1++; } back(1); }
Comentarii