【问题标题】:Coin Change Maker硬币找零器
【发布时间】:2015-09-03 23:42:01
【问题描述】:

我该怎么写?

编写一个完整的 python 程序,允许用户输入一个 0 到 99 之间的数字,代表美分。然后,程序会告诉您需要多少 25 美分硬币、1 美分硬币、5 美分硬币和硬币来改变这个整数。例如输入 92 会输出

这是我目前所写的,我已经习惯了 Java,所以我想我正在混合一些 Java 元素

a=(int(input("amount")

int p = 0
int n = 0
int d = 0
int q = 0

if(a % 10 != 5)   
    p = (a % 10)
    a -= p

q = a / 25       
    a -= q * 25

d = a / 10       
    a -= d * 10

n = a / 5       
    a -= n * 5

print ("Quarters :" + q)
print ("Dimes :" + d)
print ("Nickels :" + n)
print ("Pennies :" + p)

【问题讨论】:

  • 我认为您需要返回并查看您的教科书/在线课程/笔记,因为您的代码中散布着语法错误。
  • 好的,谢谢。我会审查它

标签: python


【解决方案1】:

这应该计算所需的不同类型硬币的数量:

a=int(input("Enter amount: ")) #Ask for amount

q = a // 25 #Calculate number of quarters
a -= q*25 #Subtract value of quarters
d = a // 10 #Calculate number of dimes
a -= d*10 #Subtract value of dimes
n = a // 5 #Calculate number of nickels
a -= n*5 #Subtract value of nickels
p = a #Calculate number of pennies



print ("Quarters :" + str(q))
print ("Dimes :" + str(d))
print ("Nickels :" + str(n)) #Print out numbers of coins
print ("Pennies :" + str(p))

它首先询问金额,然后计算所需的季度数,然后减去所需的季度数

【讨论】:

    【解决方案2】:

    贪心算法可以很好地解决这个问题(因为硬币面额)(也就是说,你总是可以取小于总面额的最大面额,并最终得到一个最优解)

    def get_next(self,change_due):
        next_coin = max(x for x in [1,5,10,25] if x <= change_due)
        return change_due-next_coin,next_coin
    
    change_due = 99
    coins = []
    while change_due > 0:
        change_due,next_coin = get_next(change_due)
        coins.append(next_coin)
    
    print coins
    

    所有这些你也可以像其他答案一样用数学来解决。还值得注意的是,如果您有 7 美分硬币,此解决方案将不再为您提供最佳解决方案(但另一个也不会)

    【讨论】:

      猜你喜欢
      • 2013-12-09
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多