Giả sử chúng ta có một số dương n, chúng ta phải kiểm tra xem trong mẫu bit của số n đã cho, số lượng các 1 liên tục có tăng từ trái sang phải hay không.
Vì vậy, nếu đầu vào là n =1775, thì đầu ra sẽ là Đúng, vì biểu diễn nhị phân của n là 11011101111, do đó số 1 liên tục là [2, 3, 4] đang tăng lên
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- bits_pattern:=một danh sách mới gồm n
- bit_count:=kích thước của bit_pattern
- p_cnt:=0, c_cnt:=0
- i:=0
- trong khi tôi
- nếu bits_pattern [i] giống với 1, thì
- c_cnt:=c_cnt + 1, i:=i + 1
- ngược lại khi bits_pattern [i - 1] là 0, thì
- i:=i + 1, c_cnt:=0
- chuyển sang lần lặp tiếp theo
- nếu không,
- nếu c_cnt
- trả về 0
- i:=i + 1, p_cnt:=c_cnt, c_cnt:=0
- nếu bits_pattern [i] giống với 1, thì
- trả về Sai
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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