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

Pythonでビット単位のOrがKに等しいN個の異なる数を検索します


2つの整数NとKがあるとします。ビット単位のORがKと同じN個の一意の値を見つける必要があります。そのような結果がない場合は、-1を返します

したがって、入力がN=4およびK=6の場合、出力は[6,0,1,2]になります。

これを解決するには、次の手順に従います-

  • MAX:=32

  • 訪問:=サイズMAXのリストとFalseで埋める

  • res:=新しいリスト

  • 関数add()を定義します。これにはnumがかかります

  • ポイント:=0

  • 値:=0

  • 0からMAXの範囲のiの場合、実行

    • visited [i]がゼロ以外の場合、

      • 次のイテレーションに行く

    • それ以外の場合

      • num AND 1がゼロ以外の場合、

        • 値:=値+(2 ^ i)

      • num:=num / 2(整数部分のみを取る)

  • resの最後に値を挿入

  • メインの方法から、次のようにします-

  • pow2:=2^0から2^31までの2の累乗の配列

  • resの最後にkを挿入します

  • cnt_k:=kのビット数

  • pow2 [cnt_k]

    • -1を返す

  • カウント:=0

  • 0からpow2[cnt_k]-1の範囲のiの場合、実行

    • add(i)

    • count:=count + 1

    • countがnと同じ場合、

      • ループから出てきます

  • 解像度を返す

理解を深めるために、次の実装を見てみましょう-

MAX = 32
visited = [False for i in range(MAX)]
res = []
def set_bit_count(n):
   if (n == 0):
      return 0
   else:
      return (n & 1) + set_bit_count(n >> 1)
def add(num):
   point = 0
   value = 0
   for i in range(MAX):
      if (visited[i]):
         continue
      else:
         if (num & 1):
            value += (1 << i)
         num = num//2
   res.append(value)
def solve(n, k):
   pow2 = [2**i for i in range(MAX)]
   res.append(k)
   cnt_k = set_bit_count(k)
   if (pow2[cnt_k] < n):
      return -1
   count = 0
   for i in range(pow2[cnt_k] - 1):
      add(i)
      count += 1
      if (count == n):
         break
   return res

n = 4
k = 6
print(solve(n, k))

入力

4, 6

出力

[6, 0, 1, 2]

  1. Pythonを使用してキース数を見つける方法は?

    次のコードを使用して、Pythonで数値がキース数であるかどうかを確認できます- 例 def is_keith_number(n):    # Find sum of digits by first getting an array of all digits then adding them    c = str(n)    a = list(map(int, c))    b = sum(a)    # Now check if the number is a keith number &

  2. Pythonで数値のリストの合計を見つける方法は?

    Pythonの組み込み関数sum()は、リストやタプルなどの反復可能なオブジェクトの数値の合計を返します。 2つの引数を取ります。初期値はオプションで、デフォルトでは0であり、反復可能なオブジェクトです 例 >>> l1=[10,20,30,40,50] >>> ttl=sum(l1) >>> ttl 150 >>> ttl=sum(range(10)) >>> ttl 45