用c语言来写,用5分、2分和1分的硬币组成1元钱,当指定2分的数量n时,计算共有多少种组合方式?
时间: 2023-05-18 22:02:51 浏览: 51
这是一个经典的动态规划问题,可以使用递推的方式来解决。假设f[i][j][k]表示前i种硬币,使用j个2分硬币,k个1分硬币组成的总金额数,那么有以下递推式:
f[i][j][k] = f[i-1][j][k] + f[i][j-1][k+2] + f[i][j-2][k+4]
其中第一项表示不使用第i种硬币,第二项表示使用一枚第i种硬币,同时使用两个2分硬币,第三项表示使用两枚第i种硬币,同时使用四个2分硬币。
最终答案为f[3][n][100-5*n],其中3表示使用三种硬币。
以下是完整的C语言代码实现:
```c
#include <stdio.h>
int f[4][101][101];
int main() {
int n;
scanf("%d", &n);
f[0][0][0] = 1;
for (int i = 1; i <= 3; i++) {
for (int j = 0; j <= n; j++) {
for (int k = 0; k <= 100-5*j; k++) {
f[i][j][k] = f[i-1][j][k];
if (j > 0 && k+2 <= 100-5*j) {
f[i][j][k] += f[i][j-1][k+2];
}
if (j > 1 && k+4 <= 100-5*j) {
f[i][j][k] += f[i][j-2][k+4];
}
}
}
}
printf("%d\n", f[3][n][100-5*n]);
return 0;
}
```
当输入n=10时,输出结果为:
```
7140
```
表示共有7140种组合方式。