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

Pythonを使用してn番目のバイナリ文字列のK番目のビットを見つけるプログラム


2つの正の値nとkがあるとすると、次のルールを使用してバイナリ文字列S_nを作成できます-

  • S_1 =0

  • S_i =S_i-1 concatenate "1" concatenate reverse(invert(S_i-1))for i> 1

ここで、reverse(x)は反転された文字列xを返し、invert(x)はxのすべてのビットを反転します。

これらは、そのような4つの文字列の例です

  • S_1 ="0"

  • S_2 ="011"

  • S_3 ="0111001"

  • S_4 ="011100110110001"

S_nでk番目のビットを見つける必要があります。

したがって、入力がn =4 k =10の場合、S_4 ="011100110110001"であるため、出力は1になり、10番目のビットは1になります(最初のビットは位置1にあります)。

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

  • kが1と同じ場合、

    • 文字列として0を返す

  • それ以外の場合

    • arr:=単一要素0の配列

    • arr2:=単一要素1の配列

    • k> arrのサイズで、実行

      • templast:=arrのコピー

      • temp2last:=arr2のコピー

      • arr:=templast concatenate 1 concatenate temp2last

      • arr2:=templast concatenate 0 concatenate temp2last

  • arrからk-1番目の要素を返す

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

def solve(n, k):
   if k == 1:
      return(str(0))
   else:
      arr = [0]
      arr2 = [1]
      while k > len(arr):
         templast = arr.copy()
         temp2last = arr2.copy()
         arr = templast + [1] + temp2last
         arr2 = templast + [0] + temp2last
      return(str(arr[k-1]))
n = 4
k = 10
print(solve(n, k))

入力

4, 10

出力

1

  1. Pythonを使用してバイナリツリーの右側のノードを見つけるプログラム

    バイナリツリーが提供されているとします。また、ノード(「u」という名前)へのポインターが与えられ、提供されたノードのすぐ右にあるノードを見つける必要があります。特定のノードの右側にあるノードは同じレベルにとどまる必要があり、特定のノードはリーフノードまたは内部ノードのいずれかになります。 したがって、入力が次のような場合 u =6の場合、出力は8になります。 ノード6の右側にあるノードはノード8であるため、値8が返されます。 これを解決するには、次の手順に従います- ルートが空の場合、 nullを返す dq:=新しい両端キュー dqの最後にルートを挿入

  2. Pythonを使用してバイナリグリッドを配置するための最小スワップを見つけるプログラム

    nxnのバイナリ行列があるとします。 1つのステップで、隣接する2つの行を選択し、それらを入れ替えるような操作を実行できます。行列の主対角線より上のすべてのノードが0になるように、必要な最小スワップの数をカウントする必要があります。そのような解決策がない場合は、-1を返します。 したがって、入力が次のような場合 0 1 0 0 1 1 1 0 0 -であるため、出力は2になります。 これを解決するには、次の手順に従います。 n:=行列の行数 m:=サイズnの配列を作成し、nで埋めます 0からn-1の範囲のiの