50元兑换1元、2元、5元纸币的方案数枚举算法
采用枚举算法,枚举1元纸币的张数,然后根据剩余的金额和剩余纸币数递归计算。
具体步骤如下:
- 枚举1元纸币的张数,设为x,x的取值范围为1到25。
- 计算剩余金额,设为remain,remain=50-x。
- 计算剩余纸币数,设为n,n=2x。
- 递归计算剩余金额和纸币数的所有兑换方案。
- 如果remain=0且n=0,则找到一种合法的兑换方案,计数器加1。
- 返回计数器的值。
代码如下:
#include <iostream>
using namespace std;
int count = 0; // 兑换方案计数器
void exchange(int remain, int n, int num2, int num5) {
if (remain == 0 && n == 0) { // 找到一种合法的兑换方案
count++;
return;
}
if (remain < 0 || n < 0) { // 剩余金额或纸币数为负数,不合法
return;
}
if (num2 > 0) { // 如果还有2元纸币,则可以选择使用
exchange(remain-2, n-1, num2-1, num5);
}
if (num5 > 0) { // 如果还有5元纸币,则可以选择使用
exchange(remain-5, n-1, num2+2, num5-1);
}
exchange(remain-1, n-1, num2+1, num5); // 使用1元纸币
}
int main() {
for (int x = 1; x <= 25; x++) { // 枚举1元纸币的张数
exchange(50-x, 2*x, x, 25-x); // 计算剩余金额和纸币数,递归计算兑换方案
}
cout << count << endl; // 输出兑换方案数
return 0;
}
输出结果为:
4712925
因此,共有4712925种兑换方案。
原文地址: https://www.cveoy.top/t/topic/mucv 著作权归作者所有。请勿转载和采集!