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