我需要帮助解决计算机科学的以下问题
职员在商店工作,每个商品的成本是正整数美元。所以,例如, 一些东西可能花费21美元,但没有任何东西花费9.99美元。 为了进行更改,职员的数量无限 以下各种面额的账单:1美元,2美元,5美元,10美元和20美元。
编写一个需要两个的过程 参数,项目的成本和支付的金额,并打印如何使用最小的更改 可能的账单数量。
答案 0 :(得分:0)
由于我也是初学者,我将把它作为python的练习。请参阅以下代码:
def pay_change(paid, cost):
# set up the change and an empty dictionary for result
change = paid - cost
result = {}
# get the result dictionary values for each bill
n_twenty = change // 20
result['$20'] = n_twenty
rest = change % 20
n_ten = rest // 10
result['$10'] = n_ten
rest = rest % 10
n_five = rest // 5
result['$5'] = n_five
rest = rest % 5
n_two = rest // 2
result['$2'] = n_two
rest = rest % 2
n_one = rest // 1
result['$1'] = n_one
# print(result) if you want to check the result dictionary
# present the result, do not show if value is 0
for k, v in result.items():
if v != 0:
print('Need', v, 'bills of', k)
逻辑是假设更改超过20,并使用//
慢慢计算,并使用%
计算其余部分。无论如何,我们最终得到一本字典,它给出了每张钞票需要多少钞票。
然后,对于那些价值为0的美元钞票,我们不需要显示它们,所以我写了一个for循环来检查这本字典中的值。
好的,现在我已经简化为代码以避免重复代码段,我很满意:
def pay_change(paid, price):
# set up the change and an empty dictionary for result
global change
change = paid - price
bills = ['$20', '$10', '$5', '$2', '$1']
# create a function to calculate the change for each bills
def f(x):
global change
result = divmod(change, x)[0]
change = divmod(change, x)[1]
return result
temp = list(map(f, (20, 10, 5, 2, 1)))
# generate the final result as a dictionary
result = dict(zip(bills, temp))
# present the result, do not show if value is 0
for k, v in result.items():
if v != 0:
print('Need', v, 'bills of', k)