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

ค้นหาจำนวนเต็มบวกขั้นต่ำที่หารด้วย A และผลรวมของหลักเท่ากับ B ใน Python


สมมติว่าเรามีตัวเลข A และ B สองตัว เราต้องหาจำนวนบวกขั้นต่ำ M เพื่อให้ M หารด้วย A ลงตัว และผลรวมของหลัก M เท่ากับ B ดังนั้นหากไม่มีผลลัพธ์ดังกล่าว ให้ส่งคืน - 1.

ดังนั้น หากอินพุตเป็น A =50, B =2 ผลลัพธ์จะเป็น 200 เนื่องจากหารด้วย 50 ลงตัว และผลรวมของหลัก =2 + 0 + 0 =2

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

  • กำหนดคอนเทนเนอร์ประเภทองค์ประกอบหนึ่งรายการ ที่มีสองตัวเลข a และ b และหนึ่งสตริง

  • que :=รายการใหม่

  • elem :=องค์ประกอบใหม่ที่มี (0, 0, สตริงว่าง)

  • เข้าชมแล้ว[0, 0] :=1

  • แทรกองค์ประกอบที่ส่วนท้ายของ que

  • ในขณะที่ขนาดของ que> 0 ทำ

    • temp_elem :=ลบองค์ประกอบแรกออกจาก que

    • ถ้า temp_elem.a เป็น 0 และ temp_elem.b คือ b แล้ว

      • คืนค่าจำนวนเต็มของ temp_elem.string

    • สำหรับผมอยู่ในช่วง 0 ถึง 9 ทำ

      • x :=(temp_elem.a * 10 + i) mod a

      • y :=temp_elem.b + i

      • ถ้า y <=b และเข้าชม[x, y] เป็นเท็จ แล้ว

        • เยี่ยมชม[x, y] :=1

        • แทรกองค์ประกอบใหม่ด้วย x, y และ temp_elem.string เชื่อมเข้าด้วยกัน

  • กลับ -1

ตัวอย่าง

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

visited = [[0 for x in range(501)] for y in range(5001)]
class Element:
   def __init__(self, a, b, string):
      self.a = a
      self.b = b
      self.string = string
def get_number(a, b):
   que = []
   elem = Element(0, 0, "")
   visited[0][0] = 1
   que.append(elem)
   while len(que) > 0:
      temp_elem = que.pop(0)
      if temp_elem.a == 0 and temp_elem.b == b:
         return int(temp_elem.string)
      for i in range(0, 10):
         x = (temp_elem.a * 10 + i) % a
         y = temp_elem.b + i
         if y <= b and visited[x][y] == False:
            visited[x][y] = 1
            que.append(Element(x, y, temp_elem.string + str(i)))
   return -1

a, b = 50, 2
print(get_number(a, b))

อินพุต

50, 2

ผลลัพธ์

200