def dpMakeChange(coinValueList,change,minCoins,coinsUsed):
#从1分到change逐个计算最小硬币数
for cents in range(1,change+1):
#初始化最大值
coinCount=cents
newcoin=1
#减去每一个硬币,向后查找最小硬币数,同时记录总的最小数
for j in [c for c in coinValueList if c<=change]:
if minCoins[cents-j]+1<coinCount:
coinCount=minCoins[cents-j]+1
newcoin=j
#得到当前最小硬币数,记录到表中
minCoins[cents]=coinCount
coinsUsed[cents]=newcoin#记录新加的硬币
#返回最后一个结果,仍然是最少的硬币数。而硬币的种类交给下一个函数
return minCoins[cents]
def printCoins(coinsUsed, change):
coin=change
while coin>0:
#面值为coin的新加的硬币
thiscoin=coinsUsed[coin]
print(thiscoin)
#面值减少
coin=coin-thiscoin
amnt=63
clist=[1,5,10,21,25]
coinsUsed=[0]*65
coinCount=[0]*65
print(dpMakeChange(clist,amnt,coinCount,coinsUsed))
printCoins(coinsUsed,amnt)
PKU数据结构与算法Python版--习题总结(12)--硬币找零
最新推荐文章于 2022-04-26 13:46:52 发布