給定要找回的總錢數和硬幣的種類,求出找零所需最少的硬幣數目。
例如:
總錢數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)