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

ตรวจสอบว่าบิตของตัวเลขมีการนับชุดบิตต่อเนื่องกันใน Python . หรือไม่


สมมติว่าเรามีจำนวนบวก 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
  • ถ้า p_cnt> c_cnt และ c_cnt ไม่ใช่ 0 แล้ว
    • คืนค่าเท็จ
  • คืนค่า True
  • ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

    ตัวอย่าง

    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