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

숫자의 비트에 파이썬에서 오름차순으로 연속적인 세트 비트 수가 있는지 확인하십시오.

<시간/>

양수 n이 있다고 가정하면 주어진 숫자 n의 비트 패턴에서 연속 1의 수가 왼쪽에서 오른쪽으로 증가하는지 여부를 확인해야 합니다.

따라서 입력이 n =1775와 같으면 n의 이진 표현이 11011101111이므로 출력은 True가 되므로 연속 1의 수는 [2, 3, 4]이며 증가합니다.

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

  • bits_pattern :=n의 새 비트 목록
  • bit_count :=bits_pattern의 크기
  • p_cnt :=0, c_cnt :=0
  • i :=0
  • 내가
  • bits_pattern[i]가 1과 같으면
    • c_cnt :=c_cnt + 1, 나는 :=나는 + 1
  • 그렇지 않으면 bits_pattern[i - 1]이 0이면
    • i :=i + 1, c_cnt :=0
    • 다음 반복으로 이동
  • 그렇지 않으면
    • c_cnt
    • 0을 반환
  • i :=i + 1, p_cnt :=c_cnt, c_cnt :=0
  • p_cnt> c_cnt 및 c_cnt가 0이 아니면
    • 거짓을 반환
  • 참 반환
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    def solve(n):
       bits_pattern = list(bin(n))
       bit_count = len(bits_pattern)
       p_cnt = 0
       c_cnt = 0
       i = 0
       while i < bit_count:
          if bits_pattern[i] == '1':
             c_cnt += 1
             i += 1
          elif bits_pattern[i - 1] == '0':
             i += 1
             c_cnt = 0
             continue
          else:
             if c_cnt < p_cnt:
                return 0
                i += 1
                p_cnt = c_cnt
                c_cnt = 0
          if p_cnt > c_cnt and c_cnt != 0:
             return False
       return True
    n = 1775
    print(solve(n))

    입력

    1775

    출력

    True