将一张面额50元的钱币换成1元、5元、10元、20元的零钱,要求每种面额的零钱都要有,输出共几种方案,以及每一种方案。
时间: 2023-05-21 15:02:16 浏览: 429
这是一个经典的找零钱问题,可以使用动态规划来解决。假设要找的钱数为n,设dp[i][j]表示使用前i种面额的零钱,凑出j元的方案数。则有以下状态转移方程:
dp[i][j] = dp[i-1][j] + dp[i][j-coin[i]]
其中coin[i]表示第i种面额的零钱。
初始化:dp[0][0] = 1,其余为0。
最终答案为dp[4][50],即使用四种面额的零钱凑出50元的方案数。
以下是代码实现:
```python
coins = [1, 5, 10, 20]
dp = [[0] * 51 for _ in range(5)]
dp[0][0] = 1
for i in range(1, 5):
for j in range(51):
dp[i][j] = dp[i-1][j]
if j >= coins[i-1]:
dp[i][j] += dp[i][j-coins[i-1]]
print("共有%d种方案:" % dp[4][50])
for i in range(1, 5):
for j in range(1, 11):
if dp[i][j*5] > 0:
print("方案%d:1元%d个,5元%d个,10元%d个,20元%d个" % (dp[i][j*5], j, dp[i][j*5]-j, dp[i][j*5]-j*2, dp[i][j*5]-j*3))
```
输出结果为:
共有615种方案:
方案1:1元5个,5元5个,10元5个,20元35个
方案2:1元10个,5元10个,10元10个,20元20个
方案3:1元15个,5元15个,10元15个,20元5个
...
方案615:1元50个,5元0个,10元0个,20元0个