编写一个C++风格的程序,解决百元问题:将一元人民币兑换成1、2、5 分的硬币,有多少种换法?
时间: 2024-11-08 21:16:51 浏览: 39
编写一个C++程序来解决百元问题,首先需要定义几个函数,分别用于计算每种面值硬币的数量。这里我们假设只考虑1分、2分和5分三种硬币。这是一个典型的动态规划问题,可以使用一个数组来存储转换过程中各个金额的解。
```cpp
#include <iostream>
using namespace std;
int coinChange(int coins[], int m, int n) {
// 创建一个n+1大小的数组dp,其中dp[i]表示i元的最小硬币组合数
int dp[n + 1];
fill(dp, dp + n + 1, -1);
// 初始化边界条件
dp[0] = 0;
for (int i = 1; i <= n; ++i) {
if (coins[0] <= i) {
dp[i] = min(dp[i], dp[i -1) {
dp[i] = min(dp[i], dp[i - coins[1]] + 1);
}
if (coins[2] <= i && dp[i] == -1) {
dp[i] = min(dp[i], dp[i - coins[2]] + 1);
}
}
return dp[n] != -1 ? dp[n] : -1; // 如果存在解则返回最小硬币组合数,否则返回-1
}
int main() {
int coins[] = {1, 2, 5}; // 1分,2分,5分硬币
int totalCoins = 100; // 总金额
int numWays = coinChange(coins, 3, totalCoins); // 调用函数求解
if (numWays != -1)
cout << "有 " << numWays << " 种方式将" << totalCoins << "元兑换成小面额硬币。\n";
else
cout << "无法找到有效的硬币组合。\n";
return 0;
}
阅读全文