Giải thích ý tưởng bài toán số may mắn

Em có một bài toán như này.
Tóm tắt đề:
Số may mắn là số được tạo thành bởi 2 chữ số 1 và 2 (vd: 11, 12, 21, 22,…)
Có một dãy các số may mắn được sắp theo tứ tự tăng dần: 1, 2, 11, 12, 21, 22,…
INPUT: N
OUTPUT: số may mắn thứ N

-Nhận thấy các số tận cùng là 2 đều ở vị trí chẵn, nhưng còn những chữ số tiếp theo thì em không nghĩ ra được cách tính. Em muốn hiểu mấu chốt để giải bài toán này là gì? Và khi nâng cấp bài toán này lên (cho K chữ số, tìm số may mắn thứ N trong dãy số may mắn được tạo thành từ các chữ số từ 1…K. Mọi người cho em xin ý tưởng với ạ :<

Sol của bài toán ban đầu

while(n)
{
    if(n&1)
        s = '1' + s , n-= 1;
    else
        s = '2' + s , n -= 2;
    n/= 2;
}

Capture
đề tương tự nộp trên NTUCODER

giả sử thay 1 với 2 thành 0 với 1 thì sao
ta sẽ được dãy
0 1 10 11 100 …

3 Likes

Nhị phân!

3 Likes

Bài giải ntn cho nó “bí hiểm” thôi.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?