สมมติว่าเรามีจำนวนบวก n เราต้องตรวจสอบว่าในรูปแบบบิตของจำนวนที่กำหนด n จำนวนต่อเนื่อง 1s เพิ่มขึ้นจากซ้ายไปขวาหรือไม่
ดังนั้น หากอินพุตเท่ากับ n =1775 ผลลัพธ์จะเป็น True เนื่องจากการแสดงไบนารีของ n คือ 11011101111 ดังนั้นจำนวน 1 วินาทีที่ต่อเนื่องกันคือ [2, 3, 4] ซึ่งกำลังเพิ่มขึ้น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- bits_pattern :=รายการใหม่ของบิตของ n
- bit_count :=ขนาดของ bits_pattern
- p_cnt :=0, c_cnt :=0
- ผม :=0
- ในขณะที่ฉัน
- ถ้า bits_pattern[i] เหมือนกับ 1 แล้ว
- c_cnt :=c_cnt + 1, i :=i + 1
- มิฉะนั้น เมื่อ bits_pattern[i - 1] เป็น 0 แล้ว
- ผม :=ผม + 1, c_cnt :=0
- ติดตามตอนต่อไป
- มิฉะนั้น
- ถ้า c_cnt
- คืน 0
- ผม :=ผม + 1, p_cnt :=c_cnt, c_cnt :=0
- ถ้า bits_pattern[i] เหมือนกับ 1 แล้ว
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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))
อินพุต
1775
ผลลัพธ์
True