换硬币。编写程序,计算将200元钱换成1元、5元和10元的零钱(要求每种零钱都要有),输出共有多少种组合换法。c语言
时间: 2024-12-11 15:17:10 浏览: 24
在C语言中,我们可以使用动态规划的思想解决这个问题,创建一个数组来存储每种金额对应的不同组合数。下面是一个简单的示例程序:
```c
#include <stdio.h>
#define MAX_CENTS 200 // 最大金额
#define COINS (1, 5, 10) // 零钱种类及面值
int dp[MAX_CENTS + 1]; // 动态规划数组,dp[i]表示i元可以有多少种组合
void count_combinations(int cents) {
if (cents == 0) {
dp[0] = 1; // 当钱数为0时,只有一种组合,即无零钱
} else {
for (int coin : COINS) { // 遍历所有零钱
if (coin <= cents) {
dp[cents] += dp[cents - coin]; // 更新当前金额的所有组合数
}
}
}
}
int main() {
dp[0] = 1;
for (int i = 1; i <= MAX_CENTS; i++) {
count_combinations(i);
}
printf("共有 %d 种组合将200元换成1元、5元和10元的零钱。\n", dp[200]);
return 0;
}
```
在这个程序中,`count_combinations` 函数通过迭代从1到当前金额的所有零钱,更新每个金额的组合数。最后,`main`函数打印出200元的总组合数。
阅读全文