给定要找回的总钱数和硬币的种类,求出找零所需最少的硬币数目。
例如:
总钱数63,硬币种类为25、21、10、5、1,求出最小硬币数
分析:
我们可以先假设只有一种硬币1,
假如总钱数为1,硬币数就为1,总钱数为2,则硬币数为2.
则总钱数n,所需的硬币数就是n个。
以列表形式表示不同总钱数所对应的硬币数目,即:
coinUsed = [i for i in range(money + 1)]
依次类推,假如硬币种类不止一种,我们只需要对比对应总钱数时所需硬币数的多少就可以了。
代码如下:
def coin_change(values, money, coinUsed): """ values:钱币对应的种类列表 money: 要找回的总钱数 coinUsed: 对应于钱币总数money所使用的硬币数目,以列表形式index对于元素值呈现 """ for cents in range(1,money+1): for value in values: if cents >= value and coinUsed[cents-value]+1 < coinUsed[cents]: coinUsed[cents] = coinUsed[cents-value]+1 print('面值为{0}的最小硬币数为{1}'.format(cents, coinUsed[cents])) list = [1,5,25,21,10] money = 63 coinsUsed = [i for i in range(money+1)] coin_change(list, 63,coinsUsed)