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

โปรแกรมเช็คว่าผู้เล่นคนแรกรับแคนดี้มากกว่าลูกอื่นหรือไม่ใน Python


สมมติว่าเรามีรายการหมายเลขที่เรียกว่าลูกกวาด และคนสองคนกำลังแข่งกันเก็บลูกกวาดให้ได้มากที่สุด ที่นี่การแข่งขันเป็นแบบผลัดกันเล่น คนที่ 1 จะเริ่มก่อน และในแต่ละตาเขาสามารถรับลูกกวาดจากด้านหน้าหรือด้านหลังได้ ต้องเช็คก่อนว่าคนที่ 1 จะเก็บลูกกวาดได้มากกว่าที่อื่นหรือไม่

ดังนั้นหากอินพุตเป็นเหมือนแคนดี้ =[1, 4, 3, 8] ผลลัพธ์จะเป็น จริง เนื่องจากคนที่ 1 สามารถรับ 8 แคนดี้ได้ในรอบแรก และไม่ว่าคนที่สองจะเลือก 1 หรือ 3 ก็ตาม คนที่ 1 สามารถชนะได้โดยเอาลูกอมที่เหลือไป

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

  • N :=ขนาดของลูกอม

  • กำหนดความแตกต่างของฟังก์ชัน () นี่จะเป็นทางซ้าย ขวา

  • ถ้าซ้ายเหมือนกับขวา แล้ว

    • คืนลูกกวาด[ซ้าย]

  • ผลตอบแทนสูงสุดของ (candies[left] − Difference(left + 1, right)) และ (candies[right] − Difference(left, right − 1))

  • จากวิธีหลักให้ทำดังต่อไปนี้ -

  • คืนค่า จริง เมื่อผลต่าง (0, N - 1)> 0 มิฉะนั้น เท็จ

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

ตัวอย่าง

class Solution:
   def solve(self, candies):
      N = len(candies)
      def difference(left, right):
         nonlocal candies
         if left == right:
            return candies[left]
         return max(candies[left] − difference(left + 1, right), candies[right] − difference(left, right − 1))
      return difference(0, N − 1) > 0
ob = Solution()
candies = [1, 4, 3, 8]
print(ob.solve(candies))

อินพุต

[1, 4, 3, 8]

ผลลัพธ์

True