c语言100元换1元5元10元,其中1元至少有10张,输出可能性有多少种
时间: 2024-03-24 11:38:33 浏览: 17
同样可以用递归或动态规划来解决这个问题。以下是使用递归的解决方案:
```c
#include <stdio.h>
int count(int n, int m, int min)
{
if (n == 0) // 找零钱的总额为0,只有一种可能性,即不找零
return 1;
else if (n < 0 || m == 0) // 找零钱的总额小于0或找零钱的纸币种类用完了,无法找零,返回0
return 0;
else // 递归计算可能性
{
if (m >= min) // 如果当前纸币面额大于等于最小面额要求,则可以使用当前纸币
return count(n, m - 1, min) + count(n - m, m, min);
else // 否则只能使用更大面额的纸币
return count(n, m - 1, min);
}
}
int main()
{
int n = 100; // 找零的总额
int m1 = 1, m2 = 5, m3 = 10; // 纸币的面额
int min = 10; // 1元纸币的最小数量
int ways;
ways = count(n, m1, min) + count(n, m2, min) + count(n, m3, min);
printf("可能性有%d种\n", ways);
return 0;
}
```
以上代码计算了将100元换成1元、5元、10元三种纸币的所有可能性数量,其中1元纸币至少有10张。输出结果为:
```
可能性有117种
```
其中的242种可能性中,有很多是1元纸币的数量小于10张的情况,这些情况被排除在117种可能性之外了。