本文主要用于汇总看见过的一些贪婪算法。如有侵权请联系,即删。
找零钱问题:假设只有 1 分、 2 分、五分、 1 角、二角、 五角、 1元的硬币。在超市结账 时,如果 需要找零钱, 收银员希望将最少的硬币数找给顾客。那么,给定 需要找的零钱数目,如何求得最少的硬币数呢?
#找零钱问题
# _*_ coding:utf-8 _*_
def main():
d=[0.01,0.02,0.05,0.1,0.2,0.5,1.0] #存储每种硬币面值
d_num=[] #存储每种硬币的数量
s=0
#拥有的零钱总和
temp=input('请输入每种零钱的数量:')
d_num0=temp.split(" ")
for i in range(0,len(d_num0)):
d_num.append(int(d_num0[i]))
s+=d[i]*d_num[i] #计算收银员共有多少钱
sum=float(input('请输入需要找的零钱:'))
#边界条件
if sum>s:
print("输入错误!")
return 0
for i in range(7,0,-1): #取不到0这个数字
i=i-1
if sum>=d[i]:
n=int(sum/d[i])
if n>=d_num[i]: #p判断是否更新n值
n=d_num[i]
sum-=n*d[i]
print("用了{0}个{1}元硬币".format(n,d[i]))
if __name__=="__main__":
main()