问题描述:
现在小王家超市打算上线一个电子计算找零系统,当你输入需要找零的金额,系统自动计算出最佳的找零策略。(人民币面值: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
谢谢阅读