【贪心算法】找零钱

问题描述:

假设只有 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()


你可能感兴趣的:(算法,贪心算法,算法,python)