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

โปรแกรมหาคะแนนสูงสุดจากการเอาหินออกใน Python

ปัญหา

มีกองหิน 3 กอง ขนาด a, b, c แต่ละเทิร์นเลือก 2 กองที่ไม่ว่าง เอาหินออก 1 ลูกจากแต่ละกอง ได้ 1 คะแนน เกมจบเมื่อเหลือกองไม่ว่างน้อยกว่า 2 กอง หาคะแนนสูงสุด

ตัวอย่าง

a=4, b=4, c=6 → ผลลัพธ์ 7 (ลำดับการเอาออก: (3,3,6)→(2,3,5)→(1,3,4)→(0,3,3)→(0,2,2)→(0,1,1)→(0,0,0))

ขั้นตอนการแก้ปัญหา

  1. minimum := min(a,b,c), maximum := max(a,b,c)
  2. left := a + b + c - maximum - minimum (ค่ากลาง)
  3. ถ้า maximum - left <= minimum:
    • คืน minimum + left - (1 + minimum - (maximum - left)) // 2
  4. มิฉะนั้น คืน minimum + min(maximum - minimum, left)

การนำไปใช้งาน (Python)

def solve(a, b, c):
    minimum = min(a,b,c)
    maximum = max(a,b,c)
    left = a+b+c-maximum-minimum
    if maximum-left <= minimum:
        return minimum + left - (1+minimum-(maximum-left))//2
    return minimum + min(maximum-minimum, left)

a = 4
b = 4
c = 6
print(solve(a, b, c))

อินพุต

4, 4, 6

เอาต์พุต

7