Cho số num. Kiểm tra xem biểu diễn nhị phân của nó có cùng số lượng khối (block) liên tiếp của 0 và 1 hay không. Lưu ý: số 0 và số toàn bit 1 không được coi là có khối 0 và 1.
Ví dụ: 455 → nhị phân 111000111 → các khối: 111, 000, 111 → độ dài khối: 3,3,3 → tất cả bằng nhau → True.
Giải thuật
- Chuyển số thành chuỗi nhị phân (bỏ tiền tố '0b').
- Duyệt chuỗi, đếm độ dài các khối liên tiếp ký tự giống nhau.
- Lưu độ dài các khối vào tập hợp. Nếu tập hợp có kích thước 1 →
True.
Mã ví dụ
def solve(num):
bin_form = bin(num).replace("0b", "")
one_count = set()
count = 1
for i in range(len(bin_form)-1):
if bin_form[i] == bin_form[i + 1]:
count += 1
else:
one_count.add(count)
count = 1
if len(one_count) == 1:
return True
return False
num = 455
print(solve(num))
Đầu vào
455
Đầu ra
True