将一笔零钱(大于 8 分,小于 1 元, 精确到分)换成 5 分、2 分和 1 分的硬币, 每种硬币至少有一枚。输入金额,问有几种换法?针对每一种换法,输出各种面额硬币的数 量和硬币的总数量。试编写相
时间: 2023-05-02 22:05:42 浏览: 393
题目大意:将一笔零钱(大于8分,小于1元,精确到分)换成5分、2分和1分的硬币,每种硬币至少有一枚。输入金额,问有几种换法,以及各面额硬币的数量和硬币的总数量。
根据题目,我们可以采用递归算法来解决。假设当前需要换 X 分钱,我们可以把 X 分钱换成:
1. X - 5 分钱加上一枚 5 分硬币,然后递归计算剩下的 X - 5 分钱的换法。
2. X - 2 分钱加上一枚 2 分硬币,然后递归计算剩下的 X - 2 分钱的换法。
3. X - 1 分钱加上一枚 1 分硬币,然后递归计算剩下的 X - 1 分钱的换法。
递归边界为 X = 0 分钱,此时换法为 1 种。
对每种换法,我们可以统计出各面额硬币的数量和硬币的总数量,最后将结果输出即可。
代码示例:(Python 实现)
def exchange_money(n):
if n == 0: # 递归边界
return [0, 0, 0], 1
coins = [[-5, 1, 0], [-2, 0, 1], [-1, 0, 0]] # 换硬币方案
cnt = 0
for c in coins:
if n >= c[0]: # 只换比当前面额小的硬币
a, b = exchange_money(n + c[0])
cnt += b
for i in range(3):
c[i] += a[i]
return coins[0], cnt
n = int(input("输入金额:"))
a, b = exchange_money(n)
print("共有", b, "种换法")
print("5 分硬币数量:", a[1])
print("2 分硬币数量:", a[2])
print("1 分硬币数量:", a[0])
print("总硬币数量:", sum(a))
阅读全文