Python练习(Q5) 自动找零

题目:(题目来源:程序员的算法趣题)

当下,坐公交或者地铁时大部分人都是刷卡的。不过,时至今日还 在用现金支付的人还是比想象的多。本题我们以安置在公交上的零钱兑 换机为背景。 这个机器可以用纸币兑换到10 日元、50 日元、100 日元和500 日 元硬币的组合,且每种硬币的数量都足够多(因为公交接受的最小额度 为 10 日元,所以不提供 1 日元和 5 日元的硬币)。兑换时,允许机器兑换出本次支付时用不到的硬币。此外,因为在 乘坐公交时,如果兑换出了大量的零钱会比较不便,所以只允许机器最 多兑换出15 枚硬币。譬如用1000 日元纸币兑换时,就不能兑换出 “100 枚 10 日元硬币”的组合。求兑换1000日元纸币时会出现多少种组合?注意,不计硬币兑出的先后顺序思路。
上代码:(正向思维)

import numpy as np
import datetime

def PayCash(money):
    sum=0
    result=[]
    for i in range(15):
        #10元
        for     j in range(15):
            #50元
            for k in range(15):
                #100元
                for l in range(15):
                    #1000元
                    sum=i*10+j*50+k*100+l*500
                    count=i+j+k+l
                    if(sum==money and count<=15):
                        result.append( [i,j,k,l])
                        break
    if(len(result)==0):
    #吐回原来的钱
        return money 
    else:
        return result   
print("*"*50)     
start = datetime.datetime.now()                  
result=PayCash(1000)  
end = datetime.datetime.now()  
spendtime=end-start 
print("PayCash result:=")
print(result) 
print("Paycash result kind:=")
print(len(result)) 
print("PayCash(1000) Spend time:{}".format(spendtime.microseconds))                   
print("*"*50)      
View Code

结果:

 

posted on 2021-11-27 13:55  半路敲代码  阅读(213)  评论(0编辑  收藏  举报

导航