สมมติว่าเรามีตัวเลข เราต้องตรวจสอบว่าการแสดงเลขฐานสองของ num มีจำนวนบล็อกต่อเนื่องกันเป็น 0s และ 1s หรือไม่ เราต้องจำไว้ว่า 0 และตัวเลขที่มี 1 ทั้งหมดนั้นไม่ถือว่ามีจำนวนบล็อคของ 0 และ 1
ดังนั้น หากอินพุตมีค่าเท่ากับ num =455 ผลลัพธ์จะเป็น True เนื่องจากการแสดงเลขฐานสองของตัวเลขนี้คือ 111000111
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- bin_form :=รูปแบบไบนารีของ num
- one_count :=ชุดใหม่
- นับ :=1
- สำหรับฉันในช่วง 0 ถึงบิตนับของ bin_form - 1 ทำ
- ถ้า bin_form[i] เหมือนกับ bin_form[i + 1] แล้ว
- นับ :=นับ + 1
- มิฉะนั้น
- แทรก นับเป็น one_count
- นับ :=1
- ถ้า bin_form[i] เหมือนกับ bin_form[i + 1] แล้ว
- ถ้าขนาด one_count เท่ากับ 1 แล้ว
- คืนค่า True
- คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
โค้ดตัวอย่าง
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))
อินพุต
455
ผลลัพธ์
True