Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬을 사용하여 숫자의 이진 형식에서 1의 가장 긴 거리를 찾는 프로그램

<시간/>

숫자 N이 있다고 가정하면 이진 표현에서 두 개의 연속 1 사이의 가장 긴 거리를 찾아야 합니다. 두 번 연속 1이 없으면 0을 반환합니다.

따라서 입력이 71과 같으면 이진법으로 71이 1000111이기 때문에 출력은 4가 됩니다. 이제 4개가 있고 첫 번째 1과 두 번째 1은 거리 4에 있습니다. 다른 모든 것은 한 거리 떨어져 있습니다. 따라서 여기서 가장 긴 거리는 4입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • K :=N의 이진 표현의 비트 목록 만들기

  • 최대 :=0, C :=0, S :=0

  • 플래그 :=거짓

  • 범위 0에서 K 크기의 i에 대해 수행

    • K[i]가 '1'이고 C가 0이고 플래그가 False이면

      • C:=나는

      • 플래그 :=참

    • 그렇지 않으면 K[i]가 '1'이고 플래그인 경우

      • S:=나는

      • 최대

        • 최대 :=|S-C|

      • C:=S

  • 최대 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

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