问题描述:
假设只有 1 分、 2 分、五分、 1 角、二角、 五角、 1元的硬币。在超市结账 时,如果 需要找零钱, 收银员希望将最少的硬币数找给顾客。那么给定 需要找的零钱数目,如何求得最少的硬币数呢?
贪心算法:
贪心算法(Greedy Alogorithm)又叫登山算法,它的根本思想是逐步到达山顶,即逐步获得最优解,是解决最优化问题时的一种简单但是适用范围有限的策略。
贪心算法没有固定的框架,算法设计的关键是贪婪策略的选择。贪心策略要无后向性,也就是说某状态以后的过程不会影响以前的状态,至于当前状态有关。
做题思路
用贪心算法的思想,很显然,每一步尽可能用面值大的纸币即可。在日常生活中我们自然而然也是这么做的。在程序中已经事先将Value按照从小到大的顺序排好
# coding=utf-8
d=[1,0.02,0.1,0.05,0.2,0.01,0.5]
def change():
d.sort() #d=[0.01,0.02,0.05,0.1,0.2,0.5,1]
while True:
try:
sum=float(input('请输入一个数'))
if sum<=0:
print('不能低于0')
else:
break
except:
print('输入有误')
i=len(d)-1
while i >= 0:
if sum>=d[i]:
n=int(sum/d[i])
sum=float("{:.2f}".format(sum-n*d[i]))
print("找了{}个{}元硬币".format(n,d[i]))
i-=1
change()