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

Pythonを使用してバイナリ文字列を使用して電球スイッチャーを作成するプログラム


部屋にn個の電球があるとすると、これらの電球には0からn-1までの番号が付けられます。それらを左から右に一列に並べる必要があります。最初は、すべての電球がオフになっています(0状態)。与えられたターゲット配列「t」で表される構成を取得する必要があります。ここで、t [i]は、i番目の電球がオンの場合は「1」、オフの場合は「0」です。電球の状態を反転させるスイッチもあります。そして、反転操作は次のように定義されます-

  • 任意の電球インデックスiを選択します。

  • 各電球をインデックスiからインデックスn-1に反転します。

ターゲットを形成するために必要なフリップの最小数を見つける必要があります。

したがって、入力がt ="0101"の場合、出力は3になります。2番目の電球から開始すると、次の構成は "0111"になり、3番目からは "0100になり、最後に反転します。 「0101」にする電球

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

  • カウント:=0

  • x:='0'

  • tの各iについて、実行します

    • iがxと同じでない場合、

      • count:=count + 1

      • x:=i

  • 返品数

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

def solve(t):
   count = 0
   x = '0'
   for i in t:
      if i != x:
         count += 1
         x = i
   return count
t = "0101"
print(solve(t))

入力

"0101"

出力

3

  1. Pythonを使用して誤った二分木を修正するプログラム

    問題のある二分木が与えられたとしましょう。ノードの右の子ポインタの1つが、バイナリツリーの同じレベルにある別のノードを誤って指しています。したがって、この問題を修正するには、このエラーが発生しているノードを見つけて、誤って指しているノードを除くそのノードとその子孫を削除する必要があります。固定二分木のルートノードを返します。 したがって、入力が次のような場合 4と6の間に誤ったリンクがあることがわかります。4の右の子ポインタは6を指しています。 次に、出力、修正されたツリーの順序の表現は、-2、3、5、6、7、8になります。 ノード4は、ノード6への誤ったリンクがあるため、削除さ

  2. PythonでDFAを使用して、バイナリ文字列が3の倍数であるかどうかを確認します

    任意の数のバイナリ表現を表す配列nがあるとします。 Deterministic Finite Automata DFAを使用して、そのバイナリ表現が3で割り切れるかどうかを確認する必要があります。 したがって、入力がn =[1、1、0、0](12のバイナリ)のような場合、出力はTrueになります。 これを解決するために、以下のようにDFAを構築できます- 数値が3で割り切れる場合、余りは0になり、そうでない場合、余りは1または2になります。これらの3つの余りには、3つの状態があります。余りが0の場合、数値が除算可能であることを意味するため、初期状態も最終状態です。 これを解決する