PKU数据结构与算法Python版--习题总结(12)--硬币找零

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值