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

Pythonを使用して数値の2進形式で1の最長距離を見つけるプログラム


数値Nがあるとすると、2進表現で2つの連続する1の間の最長距離を見つける必要があります。 2つ連続する1がない場合は、0を返します。

したがって、入力が71の場合、バイナリの71は1000111であるため、出力は4になります。これで4つあり、最初の1と2番目の1は距離4にあります。他のすべては1つの距離にあります。ここでの最長距離は4です。

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

  • K:=Nのバイナリ表現のビットのリストを作成する

  • 最大:=0、C:=0、S:=0

  • フラグ:=False

  • 0からKのサイズの範囲のiの場合、実行します

    • K [i]が「1」でCが0でフラグがFalseの場合、

      • C:=i

      • フラグ:=True

    • それ以外の場合、K [i]が「1」でフラグの場合、

      • S:=i

      • Max

        • 最大:=| S-C |

      • C:=S

  • Maxを返す

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

def solve(N):
   B = bin(N).replace('0b','')
   K = str(B)
   K = list(K)
   Max = 0
   C = 0
   S = 0
   Flag = False
   for i in range(len(K)):
      if K[i] is '1' and C is 0 and Flag is False:
         C = i
         Flag = True
      elif K[i] is '1' and Flag:
         S = i
         if Max<abs(S-C):
            Max = abs(S-C)
         C = S
   return Max
n = 71
print(solve(n))

入力

71

出力

4

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

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

  2. Pythonで水から最も遠い土地を見つけるプログラム

    0が水を表し、1が土地を表すバイナリ行列があるとします。ここで、マンハッタンの水からの距離が最も長い土地を見つけて、最終的にその距離を返す必要があります。 したがって、入力が次のような場合 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 [0,0]セルのマンハッタン距離は水から3であるため、出力は3になります。 これを解決するには、次の手順に従います- Aが空の場合、 0を返す R:=行列の行数、C:=行列の列数 距離:=次数R x Cの行列で、0で埋めます q:=いくつか