用1、2、5、10、20、25面额的纸币找零 python代码
时间: 2023-10-19 15:06:18 浏览: 64
以下为使用贪心算法的 Python 代码:
def find_change(amount):
denominations = [25, 20, 10, 5, 2, 1]
num_coins = {d: 0 for d in denominations}
for d in denominations:
while amount >= d:
num_coins[d] += 1
amount -= d
return num_coins
# Example:
print(find_change(99))
输出结果为:
{25: 3, 20: 2, 10: 0, 5: 1, 2: 2, 1: 0}
相关问题
零售机找零Python
零售机找零是指在零售交易中,当顾客支付的金额超过商品价格时,需要给顾客找零。Python是一种流行的编程语言,可以用来编写零售机找零的程序。
在Python中,可以使用以下步骤实现零售机找零:
1. 获取商品价格和顾客支付金额。
2. 计算需要找零的金额,即顾客支付金额减去商品价格。
3. 根据货币面额,计算需要找零的最少数量。
4. 输出找零的结果。
以下是一个简单的示例代码:
```python
def calculate_change(price, payment):
change = payment - price
denominations = [100, 50, 20, 10, 5, 1] # 假设货币面额为100、50、20、10、5、1
result = {}
for denomination in denominations:
count = change // denomination
if count > 0:
result[denomination] = count
change -= count * denomination
return result
# 示例用法
price = 50
payment = 100
change = calculate_change(price, payment)
print(change) # 输出:{50: 1}
```
这段代码中,`calculate_change`函数接受商品价格和顾客支付金额作为参数,计算需要找零的最少数量,并以字典形式返回结果。在示例中,商品价格为50,顾客支付金额为100,输出结果为{50: 1},表示需要找零1张50元的纸币。
商店有面额为100元、50元、20元、10元、5元、2元、1元的纸币若干。输入每种面额纸币的数量,想要给顾客找零 k 元,最少要用多少张纸币?如果不能找零,输出-1。
以下是我给出的 Python 代码实现:
```python
def min_num_of_bills(bills, k):
# 面额数组
values = [100, 50, 20, 10, 5, 2, 1]
num_of_bills = 0
for i in range(len(values)):
# 计算当前面额需要的最小张数
num = min(bills[i], k // values[i])
# 减去已经计算的面额总额
k -= num * values[i]
# 计算使用的纸币数
num_of_bills += num
# 如果已经找完零,跳出循环
if k == 0:
break
# 如果还有剩余,说明无法找零
if k > 0:
return -1
else:
return num_of_bills
```
这个函数接收两个参数:一个整数列表 bills,表示各种面额纸币的数量,以及一个整数 k,表示需要找零的总金额。函数使用贪心算法,从大面额纸币开始计算,尽可能使用数量更少的纸币,直到找完为止。如果最终还有剩余,则说明无法找零,返回 -1。否则返回使用的纸币数。