Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่า N สามารถแสดงเป็นผลรวมของจำนวนเต็มที่เลือกจากชุด {A, B} ใน Python . ได้หรือไม่


สมมุติว่าเรามีเป้าหมายเป็นตัวเลข เรามีเลข A กับ B อีกสองตัว เราต้องเช็คก่อนว่าจะได้เป้าไหมโดยเติม A กับ B กี่รอบก็ได้

ดังนั้น หากอินพุตเป็นเหมือน Target =26 A =5 B =7 ผลลัพธ์จะเป็น True เนื่องจากเราจะได้ 26 โดยการเพิ่ม A และ B เช่น (7 + 7 + 7 + 5)

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน util() นี่จะใช้เวลา x, a, b, is_ok, เป้าหมาย
  • ถ้า x> เป้าหมาย แล้ว
    • คืนสินค้า
  • ถ้า is_ok[x] เป็น True แล้ว
    • คืนสินค้า
  • is_ok[x] :=จริง
  • util(x + a, a, b, is_ok, target)
  • util(x + b, a, b, is_ok, เป้าหมาย)
  • จากวิธีหลัก ให้ทำดังนี้ -
  • is_ok :=อาร์เรย์ขนาด (เป้าหมาย + 1) และเติมด้วย False
  • util(0, a, b, is_ok, เป้าหมาย)
  • ส่งคืน is_ok[เป้าหมาย]

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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