問題描述:
現在小王家超市打算上線乙個電子計算找零系統,當你輸入需要找零的金額,系統自動計算出最佳的找零策略。(人民幣面值:100 50 21 10 5 2 1 0.5 0.2 0.1)
演算法分析:
輸入乙個金額找零的可能性是多種的,我們需要找到最優的那種方式。這就是貪心演算法。
貪心演算法的原理就是 我不管以後怎麼樣,我只把我目前碰到的問題最優解決。程式如下
def payment(money):
"""這是乙個用貪心演算法來實現乙個找零錢問題
:param money: 需要找零的數
:return: 找零的方法
"""alist= [0] * 9
if money >= 100:
n = money // 100
money = money - n*100
alist[0] = n
if money >= 50:
n = money // 50
money = money - n * 50
alist[1] = n
if money >= 20:
n = money // 20
money = money - n * 20
alist[2] = n
if money >= 10:
n = money // 10
money = money - n * 10
alist[3] = n
if money >= 5:
n = money // 5
money = money - n * 5
alist[4] = n
if money >= 2:
n = money // 2
money = money - n * 2
alist[5] = n
if money >= 1:
n = money // 1
money = money - n * 1
alist[6] = n
if money >= 0.5:
n = money // 50
money = money - n * 0.5
alist[7] = n
if money >= 0.2:
n = money // 0.2
money = money - n * 0.2
alist[8] = n
if money >= 0.1:
n = money // 0.1
money = money - n * 0.1
alist[9] = n
return alist
if __name__ == "__main__":
money = round(float(input("請輸入需要找零的金錢:")),1)
alist = payment(money)
money_list = ['百元', '五十元', '二十元', '十元', '五元', '兩元', '一元', '五角', '兩角', '一角']
for i in range(9):
if alist[i] != 0:
print("需要找零{}張{}".format(round(alist[i]),money_list[i]),end=' ')
執行結果
請輸入需要找零的金錢:543.5
需要找零5張百元 需要找零2張二十元 需要找零1張兩元 需要找零1張一元 需要找零2張兩角
process finished with exit code 0
謝謝閱讀 找零錢問題
問題描述 我們知道人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾...
找零錢問題
人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n 1 n 250 元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。輸入有多組,每組一行,為乙個整合n。輸入以0結束。輸出該面額有幾種表示方法。使用動...
找零錢問題
這是一道比較有意思的題,在牛客網網直通bat演算法的題中看到。這裡坐下記錄 題 我們知道人民幣有1 2 5 10 20 50 100這幾種面值。現在給你n元,讓你計算換成用上面這些面額表示且總數不超過100張,共有幾種。比如4元,能用4張1元 2張1元和1張2元 2張2元,三種表示方法。這題是到動態...