Advertisement
huutho_96

In chuỗi nhị phân độ dài n có k số 1

Nov 22nd, 2016
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6.  
  7.  
  8. // tìm các số nhị phân có độ dài k và có n số 1
  9. void bai_10(int value, int length, int count, int n, int k)
  10. {
  11.     // độ dài lớn hơn cần thiết thì kết thúc
  12.     if (length > n)
  13.     {
  14.         return;
  15.     }
  16.     // số số 1 lớn hơn cần thiết thì kết thúc
  17.     if (count > k)
  18.     {
  19.         return;
  20.     }
  21.     // độ dài và số chữ số 1 đúng yêu cầu thì in nó ra
  22.     // vì độ dài đã đạt đến mức cần thiết nên ta thoát nó luôn
  23.     if (length == n && count == k)
  24.     {
  25.         // in value ra với độ dài là n, nếu độ dài số < n thì chèn 0 vào trước
  26.         cout << setfill('0') << setw(n) << value << endl;
  27.  
  28.         return;
  29.     }
  30.     // tiếp tục chèn thêm số 0 vào cuối chuỗi số. Ở đây anh dùng nhân 10
  31.     bai_10(value * 10, length + 1, count, n, k);
  32.     // chèn thêm số 1 vào cuối (nhân 10 + 1). thêm số 1 thì phải tăng biến count lên 1 đơn vị
  33.     bai_10(value * 10 + 1, length + 1, count + 1, n, k);
  34. }
  35.  
  36. void main()
  37. {
  38.     int n = 4;
  39.     int k =2;
  40.     // số hiện tại là 0, có độ dài là 1 và số số 1 là 0
  41.     bai_10(0, 1, 0, n, k);
  42.     // số hiện tại là 1, có độ dài là 1 và số số 1 là 1
  43.     bai_10(1, 1, 1, n, k);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement