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

NがPythonのセット{A、B}から選択された整数の合計として表現できるかどうかを確認します


数のターゲットがあるとします。 AとBの2つの数字があります。AとBを何度でも追加して、ターゲットを取得できるかどうかを確認する必要があります。

したがって、入力がTarget =26 A =5 B =7の場合、出力はTrueになります。これは、(7 + 7 + 7 + 5)のようにAとBを追加することで26を取得できるためです。

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

  • 関数util()を定義します。これには、x、a、b、is_ok、targetが必要です
  • x>ターゲットの場合、
    • 戻る
  • is_ok [x]がTrueの場合、
    • 戻る
  • is_ok [x]:=True
  • util(x + a、a、b、is_ok、target)
  • util(x + b、a、b、is_ok、target)
  • メインの方法から次のようにします-
  • is_ok:=サイズの配列(ターゲット+ 1)で、Falseで埋めます
  • util(0、a、b、is_ok、target)
  • return is_ok [target]

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

def util(x, a, b, is_ok, target):
   if x > target:
      return
   if is_ok[x]:
      return
   is_ok[x] = True
   util(x + a, a, b, is_ok, target)
   util(x + b, a, b, is_ok, target)
def solve(target, a, b):
   is_ok = [False] * (target + 1)
   util(0, a, b, is_ok, target)
   return is_ok[target]
target = 26
A = 5
B = 7
print(solve(target, A, B))

入力

26, 5, 7

出力

True

  1. Pythonの2つの整数の合計

    2つの整数aとbがあるとします。私たちの仕事は、これら2つの整数の合計を見つけることです。 1つの制約は、+や-のような演算子は使用できないということです。したがって、a=5およびb=7の場合、結果は12になります。 これを解決するには、次の手順に従います- 解決には、ビット単位の論理演算子を使用します b =0の場合、aを返します それ以外の場合は、XOR bを指定して合計関数を再帰的に使用し、結果を1回左シフトした後にANDbを使用します 例(Python) 理解を深めるために、次の実装を見てみましょう- #include <iostream> using names

  2. Pythonでの2つの合計

    整数の配列があるとします。 2つの整数のインデックスを返す必要があります。これにより、それらを合計すると、指定された特定のターゲットに到達します。ここでは、1つの仮定を取ります。つまり、配列には常に1つの一意のソリューションがあるため、同じターゲットの2つのインデックスセットは存在しません。 たとえば、配列がA =[2、8、12、15]のようで、ターゲットの合計が20であるとすると、A [1] + A [2]=20としてインデックス1と2が返されます。 これを解決するために、配列の各要素をループします。したがって、これを解決するには、次の手順に従ってください。 resと呼ばれる結果を保