สมมติว่าเรามีตัวเลข 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