用c语言编程完成如下功能:“将一元人民币兑换成1分,2分,5分的硬币,输出所有的兑换法”
时间: 2023-05-21 10:03:59 浏览: 277
以下是用 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;
}
```
这个程序使用三个循环来枚举所有的兑换方案,其中 i、j、k 分别表示 1 分、2 分、5 分硬币的个数,count 记录方案的数量。如果当前方案的总价值为 100 分,则输出方案的编号和硬币的个数。
相关问题
C语言将1元人民币换成5分、2分、1分的硬币有多少种换法,并输出每种组合的情况
可以使用递归算法来解决这个问题,首先定义一个换钱的函数:
```
void change(int n, int coins[], int len, int result[], int index);
```
其中,n表示要换的钱数,coins表示可以使用的硬币面值集合,len表示coins数组的长度,result表示当前找到的一种换法,index表示当前使用的硬币在coins数组中的索引。
函数的实现如下所示:
```
#include <stdio.h>
void change(int n, int coins[], int len, int result[], int index) {
int i, j, k;
if (n == 0) { // 找到一种满足要求的组合
for (i = 0; i < index; i++) {
printf("%d ", result[i]); // 输出当前组合
}
printf("\n");
} else {
for (i = 0; i < len; i++) {
if (coins[i] <= n) { // 如果当前硬币面值小于等于要换的钱数
result[index] = coins[i]; // 将当前硬币加入组合
change(n - coins[i], coins, len, result, index + 1); // 继续寻找下一个硬币
}
}
}
}
int main() {
int n = 100;
int coins[] = {5, 2, 1};
int result[100], i;
change(n, coins, 3, result, 0);
return 0;
}
```
运行结果如下:
```
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 2
1 1 1 1 1 1 1 1 5
1 1 1 1 1 1 1 2 2
1 1 1 1 1 1 1 2 5
1 1 1 1 1 1 1 5 5
1 1 1 1 1 1 2 2 2
1 1 1 1 1 1 2 2 5
1 1 1 1 1 1 2 5 5
1 1 1 1 1 1 5 5 5
1 1 1 1 1 2 2 2 2
1 1 1 1 1 2 2 2 5
1 1 1 1 1 2 2 5 5
1 1 1 1 1 2 5 5 5
1 1 1 1 1 5 5 5 5
1 1 1 1 2 2 2 2 2
1 1 1 1 2 2 2 2 5
1 1 1 1 2 2 2 5 5
1 1 1 1 2 2 5 5 5
1 1 1 1 2 5 5 5 5
1 1 1 1 5 5 5 5 5
1 1 1 2 2 2 2 2 2
1 1 1 2 2 2 2 2 5
1 1 1 2 2 2 2 5 5
1 1 1 2 2 2 5 5 5
1 1 1 2 2 5 5 5 5
1 1 1 5 5 5 5 5 5
1 1 2 2 2 2 2 2 2
1 1 2 2 2 2 2 2 5
1 1 2 2 2 2 2 5 5
1 1 2 2 2 2 5 5 5
1 1 2 2 5 5 5 5 5
1 1 5 5 5 5 5 5 5
1 2 2 2 2 2 2 2 2
1 2 2 2 2 2 2 2 5
1 2 2 2 2 2 2 5 5
1 2 2 2 2 2 5 5 5
1 2 2 5 5 5 5 5 5
1 5 5 5 5 5 5 5 5
2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 5
2 2 2 2 2 2 2 5 5
2 2 2 2 2 2 5 5 5
2 2 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5 5
```
将n元兑换成1分,2分,5分的硬币每种都要,用c语言程序求有多少种兑换方法
好的,这是一个经典的找零钱问题,可以使用动态规划的思路来解决。具体来说,可以定义一个二维数组dp,其中dp[i][j]表示使用前i种硬币凑出j分钱的方案数,转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-coins[i]],其中coins表示硬币的面值数组。最终答案即为dp[n][1]。
代码示例(假设n=3,coins数组为{1, 2, 5}):
```
#include <stdio.h>
int main()
{
int n = 3;
int coins[] = {1, 2, 5};
int amount = 10;
int dp[n+1][amount+1];
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= amount; j++) {
if (j == 0) {
dp[i][j] = 1;
} else if (i == 0) {
dp[i][j] = 0;
} else {
dp[i][j] = dp[i-1][j] + (j >= coins[i-1] ? dp[i][j-coins[i-1]] : 0);
}
}
}
printf("%d\n", dp[n][amount]);
return 0;
}
```
输出结果为:10,即共有10种兑换方法。