假设拿着山芋的孩子在队列的前面。当拿到山芋的时候,这个孩子将先出列再入队列,把他放在队列的最后。经过 num 次的出队入队后,前面的孩子将被永久移除队列。并且另一个周期开始,继续此过程,直到只剩下一个名字(队列的大小为 1)
def hotPotato(namelist, num):
output=[]
simqueue = []
for name in namelist:
simqueue.insert(0,name)
while len(simqueue) > 1:
for i in range(num):
simqueue.insert(0,simqueue.pop())
output.append(simqueue.pop())
return simqueue.pop(),output
print(hotPotato(["a","b","c","d","e","f"],1))#每间隔一个删除
('e', ['b', 'd', 'f', 'c', 'a'])
一个动态规划算法来解决我们的找零问题。dpMakeChange 有三个参数:一个有效硬币值的列表,我们要求的找零额,以及一个包含每个值所需最小硬币数量的列表。 当函数完成时, minCoins 将包含从 0 到找零值的所有值的解。
def dpMakeChange(coinValueList,change,minCoins):
for cents in range(change+1):
coinCount = cents
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
minCoins[cents] = coinCount
return minCoins[change]