Cho số dương n. Kiểm tra xem trong biểu diễn nhị phân của n, số lượng bit 1 liên tiếp (từ trái sang phải) có tăng dần hay không.
Ví dụ: 1775 → nhị phân 11011101111 → các khối 1: 2, 3, 4 → tăng dần → True.
Giải thuật
- Chuyển số thành danh sách bit (chuỗi nhị phân).
- Duyệt đếm độ dài các khối 1 liên tiếp.
- Kiểm tra xem các độ dài khối có tăng dần không.
Mã ví dụ
def solve(n):
bits_pattern = list(bin(n))
bit_count = len(bits_pattern)
p_cnt = 0
c_cnt = 0
i = 0
while i < bit_count:
if bits_pattern[i] == '1':
c_cnt += 1
i += 1
elif bits_pattern[i - 1] == '0':
i += 1
c_cnt = 0
continue
else:
if c_cnt < p_cnt:
return 0
i += 1
p_cnt = c_cnt
c_cnt = 0
if p_cnt > c_cnt and c_cnt != 0:
return False
return True
n = 1775
print(solve(n))
Đầu vào
1775
Đầu ra
True