我正在寻找最有效的方法来从购买金额中计算出零钱金额(夸脱、角钱、镍币和便士)。购买金额必须小于 1 美元,零钱从 1 美元起。我需要知道有人能拿回多少 25 美分硬币、5 美分硬币和多少便士。
最好是建立一本字典吗?
我正在寻找最有效的方法来从购买金额中计算出零钱金额(夸脱、角钱、镍币和便士)。购买金额必须小于 1 美元,零钱从 1 美元起。我需要知道有人能拿回多少 25 美分硬币、5 美分硬币和多少便士。
最好是建立一本字典吗?
哎呀,你的意思是这不再是每门编程课程中的问题 2b 了吗?呃,可能不是,他们似乎也不再教人们如何做出改变了。(或者他们可能会这样做:这是家庭作业吗?)
如果你找到一个 50 岁以上的人并让他们为你做出改变,它的工作原理是这样的。假设你有一张 3.52 美元的支票,你递给收银员一张 20 美元。然后他们会说“三点五十二”来改变
这本质上是一个递归过程:您将当前面额倒数,直到当前金额加上下一个面额出现偶数。然后向上移动到下一个面额。
当然,您可以像上面那样迭代地执行此操作。
这可能非常快 - 每个面额只需几个操作:
def change(amount):
money = ()
for coin in [25,10,5,1]
num = amount/coin
money += (coin,) * num
amount -= coin * num
return money
你最好的选择是可能有一个排序的硬币大小字典,然后循环检查你的变化是否大于值,添加硬币并减去值,否则移动到字典中的下一行。
例如
Coins = [50, 25, 10, 5, 2, 1]
ChangeDue = 87
CoinsReturned = []
For I in coins:
While I >= ChangeDue:
CoinsReturned.add(I)
ChangeDue = ChangeDue - I
原谅我糟糕的python语法。希望这足以继续。
上述解决方案工作。
amount=int(input("Please enter amount in pence"))
coins = [50, 25, 10, 5, 2, 1]
coinsReturned = []
for i in coins:
while amount >=i:
coinsReturned.append(i)
amount = amount - i
print(coinsReturned)
或者,可以通过使用 floor 和 mod 功能获得解决方案。
amount = int(input( "Please enter amount in pence" ))
# math floor of 50
fifty = amount // 50
# mod of 50 and floor of 20
twenty = amount % 50 // 20
# mod of 50 and 20 and floor of 10
ten = amount % 50 % 20 // 10
# mod of 50 , 20 and 10 and floor of 5
five = amount % 50 % 20 % 10 // 5
# mod of 50 , 20 , 10 and 5 and floor of 2
two = amount % 50 % 20 % 10 % 5 // 2
# mod of 50 , 20 , 10 , 5 and 2 and floor of 1
one = amount % 50 % 20 % 10 % 5 % 2 //1
print("50p>>> " , fifty , " 20p>>> " , twenty , " 10p>>> " , ten , " 5p>>> " , five , " 2p>>> " , two , " 1p>>> " , one )
或其他解决方案
amount=int(input("Please enter the change to be given"))
endAmount=amount
coins=[50,25,10,5,2,1]
listOfCoins=["fifty" ,"twenty five", "ten", "five", "two" , "one"]
change = []
for coin in coins:
holdingAmount=amount
amount=amount//coin
change.append(amount)
amount=holdingAmount%coin
print("The minimum coinage to return from " ,endAmount, "p is as follows")
for i in range(len(coins)):
print("There's " , change[i] ,"....", listOfCoins[i] , "pence pieces in your change" )
使用数论中的整数分区可以很容易地解决这个问题。我写了一个递归函数,它接受一个数字和一个分区列表,并返回构成给定数字的可能组合的数量。
http://sandboxrichard.blogspot.com/2009/03/integer-partitions-and-wiki-smarts.html
这不完全是您想要的,但可以轻松修改它以获得您的结果。
我有上述解决方案的改进解决方案
coins=[]
cost = float(input('Input the cost: '))
give = float(input('Tipe Amount given: '))
change = (give - cost)
change2 = change-int(change)
change2 = round(change2,2)*100
coin = [50,25,10,5,1]
for c in coin:
while change2>=c:
coins.append(c)
change2 = change2-c
half=coins.count(50)
qua = coins.count(25)
dime=coins.count(10)
ni=coins.count(5)
pen=coins.count(1)
dolars = int(change)
if half !=0 or qua != 0 or dime!=0 or ni!=0 or pen!=0:
print ('The change of', round(give,2), 'is:',change, 'like \n-dolas:',dolars,'\n-halfs:',half,'\n-quarters:',qua,'\n-dime:',dime,'\n-nickels:',ni,'\n-pennies:',pen)
else:
print ('The change from', round(give,2), 'is:',change,'and no coins')