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

ตรวจสอบว่าสามารถวัดรายการโดยใช้มาตราส่วนและน้ำหนักบางส่วนใน Python . ได้หรือไม่


สมมติว่าเรามีตุ้มน้ำหนักเช่น a^0, a^1, a^2, …, a^100, 'a' เป็นจำนวนเต็มและเราก็มีเครื่องชั่งน้ำหนักที่สามารถใส่ตุ้มน้ำหนักได้ทั้งสองด้านของค่านั้น มาตราส่วน. เราต้องตรวจสอบว่ารายการน้ำหนัก W สามารถวัดโดยใช้ตุ้มน้ำหนักเหล่านี้ได้หรือไม่

ดังนั้น ถ้าอินพุตเป็น a =4, W =17, ผลลัพธ์จะเป็น True น้ำหนักคือ a^0 =1, a^1 =4, a^2 =16, เราจะได้ 16 + 1 =17 .

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

  • พบ :=เท็จ
  • กำหนดฟังก์ชัน util() สิ่งนี้จะใช้ idx, itemWt, weights, N
  • หากพบว่าเป็นจริง
    • คืนสินค้า
  • ถ้า itemWt เหมือนกับ 0 แล้ว
    • พบ :=จริง
    • คืนสินค้า
  • ถ้า idx> N แล้ว
    • คืนสินค้า
  • util(idx + 1, itemWt, weights, N)
  • util(idx + 1, itemWt + weights[idx], weights, N)
  • util(idx + 1, itemWt - weights[idx], weights, N)
  • จากวิธีหลัก ให้ทำดังนี้ -
  • ถ้า a เป็น 2 หรือ 3 แล้ว
    • คืนค่า True
  • weights :=รายการขนาด 100 และเติม 0
  • น้ำหนักรวม :=0
  • น้ำหนัก[0] :=1, ผม :=1
  • ทำสิ่งต่อไปนี้อย่างไม่สิ้นสุด ทำ
    • weights[i] :=weights[i - 1] * a
    • total_weights :=total_weights + 1
    • ถ้า weights[i]> 10^7
      • ออกมาจากลูป
    • ผม :=ผม + 1
  • util(0, W, weights, total_weights)
  • หากพบว่าเป็นจริง
    • คืนค่า True
  • คืนค่าเท็จ

ตัวอย่าง

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

found = False
def util(idx, itemWt, weights, N):
   global found
   if found:
      return
   if itemWt == 0:
      found = True
      return
   if idx > N:
      return
   util(idx + 1, itemWt, weights, N)
   util(idx + 1, itemWt + weights[idx], weights, N)
   util(idx + 1, itemWt - weights[idx], weights, N)
def solve(a, W):
   global found
   if a == 2 or a == 3:
      return True
   weights = [0] * 100
   total_weights = 0
   weights[0] = 1
   i = 1
   while True:
      weights[i] = weights[i - 1] * a
      total_weights += 1
      if weights[i] > 10**7:
         break
      i += 1
   util(0, W, weights, total_weights)
   if found:
      return True
   return False
a = 4
W = 17
print(solve(a, W))

อินพุต

4, 17

ผลลัพธ์

True