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

โปรแกรมหาระยะทางที่ยาวที่สุดของ 1 วินาทีในรูปแบบเลขฐานสองของตัวเลขโดยใช้ Python


สมมติว่าเรามีตัวเลข N เราต้องหาระยะทางที่ยาวที่สุดระหว่างเลข 1 สองตัวติดต่อกันในการแทนค่าเลขฐานสองของมัน หากไม่มี 1 สองตัวติดต่อกัน ให้คืนค่า 0

ดังนั้น ถ้าอินพุตเท่ากับ 71 ผลลัพธ์จะเป็น 4 เพราะ 71 ในระบบไบนารีคือ 1000111 ตอนนี้มีสี่อัน และ 1 ตัวแรกและ 1 อันที่สองอยู่ที่ระยะ 4 ส่วนอื่นๆ ทั้งหมดอยู่ห่างออกไปหนึ่งระยะ ระยะทางที่ยาวที่สุดคือ 4 ที่นี่

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • K :=ทำรายการบิตของการแทนค่าไบนารีของ N

  • สูงสุด :=0, C :=0, S :=0

  • ธง :=เท็จ

  • สำหรับฉันในช่วง 0 ถึงขนาด K ทำ

    • ถ้า K[i] คือ '1' และ C คือ 0 และแฟล็กเป็นเท็จ ดังนั้น

      • C:=ฉัน

      • ธง :=จริง

    • มิฉะนั้นเมื่อ K[i] คือ '1' และแฟล็ก จากนั้น

      • ส:=ผม

      • ถ้า Max

        • สูงสุด :=|S-C|

      • C:=ส

  • ผลตอบแทนสูงสุด

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

def solve(N):
   B = bin(N).replace('0b','')
   K = str(B)
   K = list(K)
   Max = 0
   C = 0
   S = 0
   Flag = False
   for i in range(len(K)):
      if K[i] is '1' and C is 0 and Flag is False:
         C = i
         Flag = True
      elif K[i] is '1' and Flag:
         S = i
         if Max<abs(S-C):
            Max = abs(S-C)
         C = S
   return Max
n = 71
print(solve(n))

อินพุต

71

ผลลัพธ์

4