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

Pythonでフィニッシュラインに到達するための移動数を調べるプログラム


車を持っていて、それを1次元の道路で運転しているとします。現在、位置=0、速度=1です。これら2つの操作のいずれかを実行できます。

  • 加速度:位置:=位置+速度と速度:=速度* 2後進ギア:速度> 0の場合は速度:=-1、それ以外の場合は速度:=1

少なくとも目標に到達するために必要な移動数を見つける必要があります。

したがって、入力がtarget =10のような場合、出力は7になります。

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

  • 関数dfs()を定義します。これには、数字、コスト、位置、否定、ターゲットが必要です

    • tot:=コスト+最大2 *(pos − 1)および2 *(neg − 1)

    • tot> =ansの場合、

      • 戻る

    • ターゲットが0と同じ場合、

      • ans:=最小のansとtot

      • 戻る

    • ステップ:=(2 ^桁)− 1

    • ステップ*2<| target |の場合、

      • 戻る

    • dfs(digit − 1、cost、pos、neg、target)

    • dfs(digit − 1、cost + digit、pos + 1、neg、target − step)

    • dfs(digit − 1、cost + digit * 2、pos + 2、neg、target − step * 2)

    • dfs(digit − 1、cost + digit、pos、neg + 1、target + step)

    • dfs(digit − 1、cost + digit * 2、pos、neg + 2、target + step * 2)

  • 主な機能から、次のようにします-

  • ans:=無限大

  • こんにちは:=1

  • 2 ^ hi <ターゲット、実行

    • こんにちは:=こんにちは+1

  • dfs(hi、0、0、0、target)

  • ansを返す

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

class Solution:
   def solve(self, target):
      self.ans = int(1e9)
      hi = 1
      while (1 << hi) < target:
         hi += 1
      self.dfs(hi, 0, 0, 0, target)
      return self.ans
   def dfs(self, digit, cost, pos, neg, target):
      tot = cost + max(2 * (pos − 1), 2 * neg − 1)
      if tot >= self.ans:
         return
      if target == 0:
         self.ans = min(self.ans, tot)
         return
      step = (1 << digit) − 1
      if step * 2 < abs(target):
         return
      self.dfs(digit − 1, cost, pos, neg, target)
      self.dfs(digit − 1, cost + digit, pos + 1, neg, target − step)
      self.dfs(digit − 1, cost + digit * 2, pos + 2, neg, target − step * 2)
      self.dfs(digit − 1, cost + digit, pos, neg + 1, target + step)
      self.dfs(digit − 1, cost + digit * 2, pos, neg + 2, target + step * 2)
ob = Solution()
print(ob.solve(10))

入力

10

出力

7

  1. Pythonでgodownに入れるボックスの数を見つけるためのプログラム

    整数を含む2つの配列があるとします。 1つのリストには、いくつかのユニット幅ボックスの高さが含まれ、別の配列には、godownの部屋の高さが含まれます。部屋には0...nの番号が付けられ、部屋の高さは配列godownのそれぞれのインデックスに示されます。ゴダウンに押し込める箱の数を調べなければなりません。いくつかの点に注意する必要があります ボックスを重ねることはできません。 ボックスの順序は変更できます。 ボックスは左から右にのみゴダウンに入れられます。 ボックスが部屋の高さよりも高い場合、そのボックスとその右側のすべてのボックスをゴダウンに押し込むことはできません。

  2. リスト内の最小数を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −リストが表示されます。リストで利用可能な最小の番号を表示する必要があります ここでは、リストを並べ替えて最小の要素を取得するか、組み込みのmin()関数を使用して最小の要素を取得できます。 次に、以下の実装の概念を観察しましょう- 例 list1 = [101, 120, 104, 145, 99] # sorting using built-in function list1.sort() print("Smallest element is:", list1[0]) 出力 Smal