python基础----找零问题

给定要找回的总钱数和硬币的种类,求出找零所需最少的硬币数目。

例如:

  总钱数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)
原文地址:https://www.cnblogs.com/jeffrey04118110/p/11829459.html