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;
}