Python
 Computer >> コンピューター >  >> プログラミング >> Python

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
  • i
  • bits_pattern [i]が1と同じ場合、
    • c_cnt:=c_cnt + 1、i:=i + 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でない場合、
    • Falseを返す
  • Trueを返す
  • 理解を深めるために、次の実装を見てみましょう-

    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

    1. 連続する1’のないバイナリ文字列の数をカウントするPythonプログラム

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −正の整数Nが与えられているので、文字列に連続する1が存在しないように、長さNで使用可能なすべての可能な個別のバイナリ文字列をカウントする必要があります。 次に、以下の実装のソリューションを見てみましょう- 例 # count the number of strings def countStrings(n):    a=[0 for i in range(n)]    b=[0 for i in range(n)]    a[0] = b[0]

    2. 数値の合計ビットをカウントするPythonプログラムを作成しますか?

      最初に数値を入力し、bin()関数を使用してこの数値をバイナリに変換し、次に出力文字列の最初の2文字「0b」を削除し、次にバイナリ文字列の長さを計算します。 例 Input:200 Output:8 説明 Binary representation of 200 is 10010000 アルゴリズム Step 1: input number. Step 2: convert number into its binary using bin() function. Step 3: remove first two characters ‘0b’ of output binary st