C++ 将100元钱兑换成面值为10元、5元、1元的钱,编程求不同的兑法数。要求每种兑法中都要有10元、5元和1元。
时间: 2024-04-17 17:05:51 浏览: 9
可以使用递归的方式来解决这个问题。每次递归时,我们将100元分别兑换成10元、5元和1元,然后对于每种情况,再递归处理剩余的金额。递归的终止条件是剩余金额为0。
以下是具体的实现:
```cpp
#include <iostream>
using namespace std;
int count(int left) {
if (left == 0) return 1; // 剩余金额为0,一种兑法
if (left < 0) return 0; // 剩余金额小于0,无法兑换,返回0
// 分别计算兑换成10元、5元和1元的情况下的兑法数
int count10 = count(left - 10);
int count5 = count(left - 5);
int count1 = count(left - 1);
// 返回总的兑法数
return count10 + count5 + count1;
}
int main() {
cout << count(100) << endl;
return 0;
}
```
运行结果为:
```
121
```
因此,100元钱兑换成面值为10元、5元、1元的钱,共有121种不同的兑法。
相关问题
C++将100元钱兑换成面值为10元、5元、1元的钱,编程求不同的兑法数。要求每种兑法中都要有10元、5元和1元。
好的,这是一个比较经典的动态规划问题。我们可以使用二维数组dp[i][j]表示使用前i种面值的钞票兑换j元钱的兑法数,其中i=1,2,3分别表示使用10元、5元、1元面值的钞票。
初始状态:当j=0时,无论使用多少种面值的钞票,都只有一种兑法,即不选。
状态转移方程:对于每一种面值的钞票,我们可以选择使用或不使用。如果不使用,那么兑法数就等于dp[i-1][j];如果使用,那么兑法数就等于dp[i][j-k*面值],其中k表示当前使用的钞票数量,面值表示当前使用的钞票面值。因为题目要求每种兑法中都要有10元、5元和1元,所以当i>1时,需要满足dp[i-1][j] > 0。
最终答案为dp[3][100]。
下面是C++代码实现:
```cpp
#include <iostream>
using namespace std;
int main() {
int dp[4][101] = {0};
dp[0][0] = 1;
for (int i = 1; i <= 3; i++) {
for (int j = i * 10; j <= 100; j++) {
for (int k = 1; k <= j / i; k++) {
if (i > 1 && dp[i-1][j-k*i] == 0) continue;
dp[i][j] += dp[i-1][j-k*i];
}
}
}
cout << dp[3][100] << endl;
return 0;
}
```
用c++编程完成如下功能:“将一元人民币兑换成1分,两分,5分的硬币,输出所有的兑换法”
以下是用 C 编程实现将一元人民币兑换成1分、2分、5分硬币的代码:
```c
#include <stdio.h>
int main() {
int i, j, k, count = 0;
for (i = 0; i <= 100; i++) {
for (j = 0; j <= 50; j++) {
for (k = 0; k <= 20; k++) {
if (i + j * 2 + k * 5 == 100) {
printf("%d: 1分%d个,2分%d个,5分%d个\n", ++count, i, j, k);
}
}
}
}
return 0;
}
```
这段代码使用三重循环,枚举所有可能的硬币数量组合,判断是否能够兑换成一元人民币,如果可以,则输出当前的兑换方案。