Module: Lặp lại trên tất cả các mẫu con của một mặt nạ nhất định


Problem

1 /7


Chuỗi nhị phân có độ dài nhất định

Theory Click to read/hide

Nó xảy ra rằng cần phải liệt kê tất cả các chuỗi bit có độ dài nhất định. Hay nói cách khác, lặp lại tất cả các tùy chọn có thể, trong đó đối với mỗi đối tượng, một trong hai trạng thái có thể được chọn.

Trong những tình huống như vậy, có thể thực hiện liệt kê bằng cách sử dụng mặt nạ bit. Ưu điểm của phương pháp này là mã như vậy hoạt động không đệ quy và hoạt động trên các số thay vì tập hợp hoặc tương tự, giúp cải thiện đáng kể hiệu suất.

Mã chung sử dụng bitmasks được đưa ra dưới đây: intn; // số đối tượng (độ dài chuỗi bit) for (int mask = 0; mask < (1 << n); mask++) { // lặp qua tất cả các số từ 0 đến 2^n - 1, trong đó mỗi số tương ứng với một bitmask // mặt nạ số hiện tại là một bitmask, trong đó bit thứ i chỉ định trạng thái của đối tượng thứ i for (int i = 0; i < n; i++) { // lặp lại n bit để biết trạng thái của từng đối tượng if ((1 << i) & mask) { // kiểm tra xem bit thứ i có bằng 1 không // xử lý tùy chọn mà đối tượng thứ i có trạng thái '1' } else { // trường hợp bit thứ i bằng 0 // xử lý tùy chọn đối tượng thứ i của trạng thái '0' } } }
Mã này chạy trong O(2^n * f(n)), trong đó f(n) là thời gian bạn cần để xử lý một lần lặp cụ thể.

Problem

Cho số N in ra tất cả các xâu có độ dài N bao gồm các số 0 và 1 theo thứ tự từ điển.

Khi giải quyết vấn đề, hãy sử dụng phép liệt kê tất cả các mẫu con.

Đầu vào

Số duy nhất N được cho (số tự nhiên, 1 ≤ N ≤ 10)

Đầu ra

Cần in tất cả các chuỗi có độ dài N gồm các số 0 và 1 theo thứ tự từ điển, mỗi chuỗi một dòng

 
Đầu vào Đầu ra
2 00 01 10 11