สมมติว่าเรามีตัวเลข เราต้องตรวจสอบว่าการแสดงเลขฐานสองของ 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