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

โปรแกรมตรวจสอบว่าเราสามารถสร้าง 24 โดยวางโอเปอเรเตอร์ใน python . ได้หรือไม่


สมมติว่าเรามีรายการตัวเลขสี่ตัว โดยแต่ละหมายเลขอยู่ในช่วง 1 ถึง 9 ในลำดับคงที่ ตอนนี้ถ้าเราวางตัวดำเนินการ +, -, * และ / (/ หมายถึงการหารจำนวนเต็ม) ระหว่างตัวเลขและจัดกลุ่มด้วยวงเล็บ เราต้องตรวจสอบว่าสามารถรับค่า 24 ได้หรือไม่

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[5, 3, 6, 8, 7] ผลลัพธ์จะเป็น True เช่น (5 * 3) - 6 + (8 + 7) =24

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

  • กำหนดฟังก์ชัน recur() นี่จะใช้เวลา arr
  • answer :=รายการใหม่
  • สำหรับฉันในช่วง 0 ถึงขนาดของ arr - 1 ทำ
    • pre :=recur(arr[จากดัชนี 0 ถึง i])
    • suf :=เกิดขึ้นอีก (arr[จากดัชนี i + 1 ถึงปลาย])
    • สำหรับแต่ละ k ใน pre ทำ
      • สำหรับแต่ละ j ใน suf ทำ
        • ใส่ (k + j) ต่อท้ายคำตอบ
        • ใส่ (k - j) ต่อท้ายคำตอบ
        • ใส่ (k * j) ต่อท้ายคำตอบ
        • ถ้า j ไม่ใช่ 0 แล้ว
          • แทรก (ผลหารของ k / j) ที่ท้ายคำตอบ
  • ถ้าขนาดของคำตอบคือ 0 และขนาดของ arr คือ 1 ดังนั้น
    • ใส่ arr[0] ที่ท้ายคำตอบ
  • ส่งคืนคำตอบ
  • จากวิธีหลัก ให้ตรวจสอบว่า 24 เป็นซ้ำ (nums) หรือไม่ ถ้าใช่ ให้คืนค่าเป็น True ไม่เช่นนั้นจะเป็นเท็จ

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

ตัวอย่าง

class Solution:
   def solve(self, nums):
      def recur(arr):
         answer = []
         for i in range(len(arr) - 1):
            pre, suf = recur(arr[: i + 1]), recur(arr[i + 1 :])
            for k in pre:
               for j in suf:
                  answer.append(k + j)
                  answer.append(k - j)
                  answer.append(k * j)
                  if j != 0:
                     answer.append(k // j)
         if len(answer) == 0 and len(arr) == 1:
            answer.append(arr[0])
         return answer
      return 24 in recur(nums)
ob = Solution()
nums = [5, 3, 6, 8, 7]
print(ob.solve(nums))

อินพุต

[5, 3, 6, 8, 7]

ผลลัพธ์

True