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

Python에서 n과 동일한 수의 세트 비트로 더 높은 수를 찾는 프로그램은 무엇입니까?

<시간/>

숫자 n이 있다고 가정합니다. 이진 형식의 n과 1의 개수가 같은 가장 작은 다음 높은 숫자를 찾아야 합니다.

따라서 입력이 n =7과 같으면 출력은 11이 됩니다. 이진법으로 7은 0111이고 7에서 다음으로 높은 값이 3이면 11이 되고 이진법은 1011이 되기 때문입니다.

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

  • 복사 :=n, 0 :=0, 일 :=0

  • 복사가 0이 아니고 복사가 짝수인 동안 수행

    • 0 :=0 + 1

    • 복사 =복사 / 2

  • 복사가 이상한 동안 수행

    • 일 :=일 + 1

    • 복사 =복사 / 2

  • 오른쪽 :=1 + 0

  • n :=n OR (2^오른쪽)

  • n :=n AND 반전 ((2^right) - 1)

  • n :=n OR((2 ^ (일 - 1)) - 1

  • 반환 n

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

class Solution:
   def solve(self, n):
      copy = n
      zeros = 0
      ones = 0
      while copy and not copy & 1:
         zeros += 1
         copy >>= 1
      while copy & 1:
         ones += 1
         copy >>= 1
      right = ones + zeros
      n |= 1 << right
      n &= ~((1 << right) - 1)
      n |= (1 << ones - 1) - 1
      return n

ob = Solution()
n = 7
print(ob.solve(n))

입력

7

출력

11