在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