Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่าบิตของตัวเลขมีบล็อก 1 ติดต่อกันเพิ่มขึ้นจากซ้ายไปขวา ใน Python


ปัญหา

ให้จำนวนเต็มบวก n ตรวจสอบว่าในรูปแบบไบนารี จำนวน 1 ติดต่อกัน (consecutive 1s) เพิ่มขึ้นจากซ้ายไปขวาหรือไม่

ตัวอย่าง

n = 1775 → binary = 11011101111
บล็อก 1: 11 (2), 111 (3), 1111 (4) → 2, 3, 4 เพิ่มขึ้น → True

แนวคิดการแก้ปัญหา

  1. แปลงเป็นสตริงไบนารี
  2. สแกนจากซ้ายไปขวา นับความยาวบล็อก 1 ติดต่อกัน
  3. เก็บความยาวในลิสต์ ตรวจสอบว่าเพิ่มขึ้นอย่างเคร่งครัด

โค้ดตัวอย่าง

def solve(n):
    bits = bin(n)[2:]
    blocks = []
    count = 0
    for b in bits:
        if b == '1':
            count += 1
        elif count > 0:
            blocks.append(count)
            count = 0
    if count > 0:
        blocks.append(count)
    
    # ตรวจสอบเพิ่มขึ้นอย่างเคร่งครัด
    return all(blocks[i] < blocks[i+1] for i in range(len(blocks)-1))

print(solve(1775))  # True (blocks: 2, 3, 4)
print(solve(23))    # False (10111 → blocks: 1, 2)

อินพุต / เอาต์พุต

Input:  1775
Output: True