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

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


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

เช่น 71 ผลลัพธ์คือ 4 เพราะ 71 ในไบนารีคือ 1000111 มี 1 4 ตัว 1 ตัวแรกและตัวที่สองห่างกัน 4 ตำแหน่ง ที่เหลือห่างกัน 1 ตำแหน่ง ดังนั้นระยะห่างมากที่สุดคือ 4

ขั้นตอนการแก้ปัญหา

  • K = ลิสต์บิตของรูปแบบไบนารีของ N
  • Max = 0, C = 0, S = 0, Flag = False
  • วนลูป i จาก 0 ถึง len(K)-1:
    • ถ้า K[i] == '1' และ C == 0 และ Flag == False: C = i, Flag = True (เจอ 1 ตัวแรก)
    • มิฉะนั้นถ้า K[i] == '1' และ Flag: S = i; ถ้า Max < |S-C|: Max = |S-C|; C = S (อัปเดตระยะห่างและตำแหน่ง 1 ล่าสุด)
  • คืน Max

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

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] == '1' and C == 0 and Flag == False:
            C = i
            Flag = True
        elif K[i] == '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