使用Python找出可以得到的最大硬币数的程序
假设有3 * n堆硬币,它们的大小不同,有三个玩家玩一个游戏,如下所示 –
- 在每一步中,player1将选择任意3堆硬币。
-
他可以选择手中硬币最多的那堆,玩家2将选择这堆。
-
然后,player1将选取下一个具有最大数量的堆。
-
牌手3选中最后一堆。
-
重复这些步骤,直到没有多余的硬币堆。
现在,如果我们有一个名为piles的整数数组,其中piles[i]是第i堆硬币中的硬币数量,则我们必须找出Player1可以拥有的最大硬币数。
因此,如果输入是piles = [2,4,1,2,7,8],则输出将为9,因为首先我们可以选择三元组(2,7,8),然后Player2将选择8,Player1将选择7,2次选择Player3。然后再次选择三元组(1,2,4),然后Player2选择硬币4的堆,然后Player1选择2和剩下的1个为Player3。当前Player1拥有7 + 2 = 9个硬币,这是最大的。
为了解决这个问题,我们将遵循以下步骤−
- 对列表piles进行排序
-
ans:= 0
-
当piles的大小与0不同时,执行
- ans : = ans + piles的倒数第二个元素
-
从piles中删除倒数第二个元素
-
从piles中删除最后一个元素
-
从piles中删除第一个元素
-
返回ans
让我们看看以下实现,以获得更好的理解−
示例
def solve(piles):
piles.sort()
ans = 0
while(len(piles)!=0):
ans = ans + piles[-2]
del piles[-2]
del piles[-1]
del piles[0]
return ans
piles = [2,4,1,2,7,8]
print(solve(piles))
输入
[2,4,1,2,7,8]
输出
9