zoukankan      html  css  js  c++  java
  • 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

    结果:

     

  • 相关阅读:
    Ubuntu 12.04 root账户开启及密码重设
    Notepad++ 开启「切分窗口」同时检视、比对两份文件
    第11章 Java异常与异常处理
    第10章 Java类的三大特性之一:多态
    第9章 Java类的三大特性之一:继承
    第8章 Java类的三大特性之一:封装
    第7章 类和对象
    java 经典程序 100 例
    第6章 Java类中的方法
    第5章 Java数组
  • 原文地址:https://www.cnblogs.com/banluqiaodaima/p/15611765.html
Copyright © 2011-2022 走看看