在Python中寻找通过移除石头所能获得的最大得分的程序

在Python中寻找通过移除石头所能获得的最大得分的程序

假设有三个值a、b和c。我们正在玩带有三堆石头的接龙游戏,它们的大小分别为a、b和c。每回合玩家选择两堆不同的非空石头,从每堆中各拿一个石头,并在他的分数上加1分。游戏在不到两堆非空石头时结束。因此,我们必须找到您可以获得的最大得分。

因此,如果输入如下:a = 4,b = 4,c = 6,则输出将为7,因为初始状态为(4, 4, 6),然后我们可以遵循以下步骤-

  • 从第1和第2堆中选择,因此当前状态为(3, 3, 6)

  • 从第1和第3堆中选择,因此当前状态为(2, 3, 5)

  • 从第1和第3堆中选择,因此当前状态为(1, 3, 4)

  • 从第1和第3堆中选择,因此当前状态为(0, 3, 3)

  • 从第2和第3堆中选择,因此当前状态为(0, 2, 2)

  • 从第2和第3堆中选择,因此当前状态为(0, 1, 1)

  • 从第2和第3堆中选择,因此当前状态为(0, 0, 0)

最后堆数少于2堆石头,游戏结束。

要解决这个问题,我们将按照以下步骤进行-

  • minimum := a、b和c中的最小值

  • maximum := a、b和c中的最大值

  • left := a + b + c – maximum – minimum

  • 如果maximum-left <= minimum,则

    • 返回minimum + left – (1 + minimum – (maximum-left))/2的商
  • 返回minimum + (maximum-minimum和left中的最小值)

示例

以下是示例实现,以更好地理解 –

 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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程