.换硬币:将一笔零钱m(大于8分,小于1元,精确到分)换成5分,2分和1分的硬币组合,要求每种硬币至少有一枚,有几种不同的换法?要求按硬币面值为5分,2分和1分的顺序输出硬币数量。试编写相应程序。
时间: 2024-04-07 17:24:14 浏览: 179
换硬币问题是一个经典的动态规划问题。可以使用递归或迭代的方式解决。下面是一种迭代的解法:
```python
m = int(input()) # 输入金额
dp = [[0] * 3 for _ in range(m + 1)] # 初始化dp数组
dp[0] = [1, 0, 0] # 初始化dp[0]
for i in range(1, m + 1):
for j in range(3):
if j == 0: # 当前硬币面值为5分
if i >= 5:
dp[i][j] = dp[i - 5][j] + dp[i - 5][j + 1] + dp[i - 5][j + 2]
elif j == 1: # 当前硬币面值为2分
if i >= 2:
dp[i][j] = dp[i - 2][j] + dp[i - 2][j + 1]
else: # 当前硬币面值为1分
dp[i][j] = dp[i - 1][j]
print(dp[m][0] + dp[m][1] + dp[m][2]) # 输出总的换法数
# 输出各种换法
for i in range(m + 1):
if dp[i][0] + dp[i][1] + dp[i][2] > 0:
print(i, dp[i][0], dp[i][1], dp[i][2])
```
阅读全文