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

Pythonで石で川を渡れるかどうかを確認するプログラム


石と呼ばれるソートされた番号のリストがあり、これが横断しようとしている川の石の位置を表しているとします。川を渡るには、最後の石で終わらせなければなりません。これで、各ステップで、(k-1、k、またはk + 1)ステップ先にジャンプできます。ここで、kは最後のジャンプの距離です。川を渡れるかどうかを確認する必要があります。

したがって、入力がstones =[0、1、3、4、5、6、8、9、13]のようである場合、出力はTrueになります。これは、0から開始して、1ユニットジャンプして石に移動できるためです。 1、次に2ユニットで3になり、その後2ユニットで5になり、次に3ユニットで8になり、最後に5ユニットで13になり、これが最後の場所です。

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

  • start:=A [0]、end:=Aの最後の要素
  • A:=Aのすべての一意の要素のセット
  • 関数check()を定義します。これには、pos:=start、prev:=0
  • が必要です。
  • posがendと同じ場合、
    • Trueを返す
  • [prev-1、prev、prev + 1]のジャンプごとに、実行
    • ジャンプ>=1の場合、
      • next_pos:=ジャンプ+位置
      • next_posがAにあり、check(next_pos、jump)がtrueの場合、
        • Trueを返す
  • Falseを返す
  • メインメソッドからcheck()を呼び出し、結果を返します

例(Python)

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

class Solution:
   def solve(self, A):
      start, end = A[0], A[-1]
      A = set(A)
      def check(pos=start, prev=0):
         if pos == end:
            return True
         for jump in [prev - 1, prev, prev + 1]:
            if jump >= 1:
               next_pos = jump + pos
               if next_pos in A and check(next_pos, jump):
                  return True
         return False
      return check()
ob = Solution()
stones = [0, 1, 3, 4, 5, 6, 8, 9, 13]
print(ob.solve(stones))

入力

[0, 1, 3, 4, 5, 6, 8, 9, 13]

出力

True

  1. 数値が素数かどうかをチェックするPythonプログラム

    ここでは、1より大きい指定された数が素数であるかどうかをテストするプログラムを作成します。 素数は1より大きい正の整数であり、2つの因子1と、その数自体(たとえば、数:2、3、5、7…など)は2つの因子しかないため、素数です。 1と番号自体。 # Python program to check if the input number is prime or not #Take input from the user num = int(input("Please enter the number: ")) #Check if the given number is gre

  2. 文字列が回文であるかどうかをチェックするPythonプログラム

    文字列が与えられた場合、私たちのタスクは、この文字列が回文であるかどうかを確認することです。 アルゴリズム Step1: Enter string as an input. Step2: Using string slicing we reverse the string and compare it back to the original string. Step3: Then display the result. サンプルコード my_string=input("Enter string:") if(my_string==my_string[::-1]): &nbs