• 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

    结果:

     

  • 相关阅读:
    POJ
    POJ
    POJ1753 Flip Game(位运算+暴力枚举)
    20160326 javaweb 请求转发和请求包含
    将博客搬至CSDN
    javaweb 中的乱码问题
    20160324 javaweb 之request
    20160322 javaweb 学习笔记--response验证码实现
    20160322 javaweb 学习笔记--response 重定向
    深入分析 Java 中的中文编码问题 (文章来自网络)
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15611765.html
Copyright © 2020-2023  润新知