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

Pythonで指定された秒を加算または減算するだけで12時に戻ることができるかどうかを確認します


n個の異なる2番目の値の配列があるとします。与えられた秒を足したり引いたりするだけで、12時から始めて12に戻ることができるかどうかをチェックする必要があります。指定されたすべての秒を1回だけ使用でき、秒を加算または減算できます。

したがって、入力が秒=[40,90,50]の場合、出力はTrueになります。これは、40を加算し、次に90を減算し、次に50を加算できるためです。

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

  • size:=2 ^(秒の長さの配列)
  • 範囲0からサイズ-1のcの場合、実行
    • 追加:=0
    • 0から秒のサイズ-1までの範囲のjの場合、実行
      • c AND(2 ^ j)がゼロ以外の場合、
        • 追加:=追加+秒[j]
      • それ以外の場合、
        • add:=add --seconds [j]
    • addが(24 * 60)で割り切れる場合、
      • Trueを返す
  • Falseを返す

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

def solve(seconds):
   size = 2**len(seconds)
   for c in range(size):
      add = 0
      for j in range(len(seconds)) :
         if c & (1 << j):
            add += seconds[j]
         else:
            add -= seconds[j]
      if add % (24 * 60) == 0:
         return True
   return False
seconds = [40,90,50]
print(solve(seconds))
>

入力

[40,90,50]

出力

True

  1. Pythonで島で生き残ることが可能かどうかを確認する

    島があるとしましょう。その場所には店舗が1つしかないため、この店舗は日曜日を除いて常に営業しています。入力として次の値があります- N(誰かが毎日購入できる食品の最大数) S(誰かが生き残るために必要な日数) M(生き残るために毎日必要な食物の数) 月曜日で、次のS日間生き残る必要がある場合。次のS日間生き残ることができるように、食料を購入するために必要な最小日数を見つけることができれば、生き残ることができるかどうかを確認する必要があります。 したがって、入力がS =12、N =24、M =3の場合、出力はTrueになり、食料を購入する必要がある最小日数は2になります。これは、8

  2. PythonでベクトルAを回転させ、それにベクトルCを追加することで、ベクトルBに到達できるかどうかを確認します。

    2D平面に3つのベクトルx、y、zがあるとします。ベクトルxからベクトルyを90度(時計回り)回転させるか、必要に応じて何度でもzを追加して、ベクトルyを取得できるかどうかを確認する必要があります。 したがって、入力がx =(-4、-2)y =(-1、2)z =(-2、-1)のような場合、位置を取得するためにxにzを追加できるため、出力はTrueになります。 (-2、-1)、次に時計回りに90°回転して(-1、2)を取得します。 これを解決するには、次の手順に従います- 関数util()を定義します。これにはp、q、r、sが必要です d:=r * r + s * s dが0