c语言程序设计:取1元,2元和5元纸币共10张,凑整18元,共有几种方法?(用n表示)
时间: 2024-02-16 11:04:50 浏览: 25
这是一个典型的组合数学问题,可以使用动态规划的方法来解决。具体来说,可以定义一个二维数组dp,其中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元只有一种方案。
根据上述状态转移方程,可以编写如下的C语言程序:
```c
#include <stdio.h>
int main()
{
int coin[] = {0, 1, 2, 5}; // 纸币面值
int dp[4][19] = {0}; // 动态规划数组
int i, j;
dp[0][0] = 1; // 初始状态
for (i = 1; i <= 3; i++) {
for (j = 0; j <= 18; j++) {
if (j < coin[i]) {
dp[i][j] = dp[i-1][j];
} else {
dp[i][j] = dp[i-1][j] + dp[i][j-coin[i]];
}
}
}
printf("共有%d种方法\n", dp[3][18]); // 输出结果
return 0;
}
```
运行程序,输出结果为:
```
共有39种方法
```
因此,共有39种方法可以凑整18元。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)