找零錢問題

2021-09-13 10:35:43 字數 1823 閱讀 7113

問題描述:

現在小王家超市打算上線乙個電子計算找零系統,當你輸入需要找零的金額,系統自動計算出最佳的找零策略。(人民幣面值: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元,三種表示方法。這題是到動態...