Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- using namespace std;
- // tìm các số nhị phân có độ dài k và có n số 1
- void bai_10(int value, int length, int count, int n, int k)
- {
- // độ dài lớn hơn cần thiết thì kết thúc
- if (length > n)
- {
- return;
- }
- // số số 1 lớn hơn cần thiết thì kết thúc
- if (count > k)
- {
- return;
- }
- // độ dài và số chữ số 1 đúng yêu cầu thì in nó ra
- // vì độ dài đã đạt đến mức cần thiết nên ta thoát nó luôn
- if (length == n && count == k)
- {
- // in value ra với độ dài là n, nếu độ dài số < n thì chèn 0 vào trước
- cout << setfill('0') << setw(n) << value << endl;
- return;
- }
- // tiếp tục chèn thêm số 0 vào cuối chuỗi số. Ở đây anh dùng nhân 10
- bai_10(value * 10, length + 1, count, n, k);
- // 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ị
- bai_10(value * 10 + 1, length + 1, count + 1, n, k);
- }
- void main()
- {
- int n = 4;
- int k =2;
- // số hiện tại là 0, có độ dài là 1 và số số 1 là 0
- bai_10(0, 1, 0, n, k);
- // số hiện tại là 1, có độ dài là 1 và số số 1 là 1
- bai_10(1, 1, 1, n, k);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement