换零钱的算法
问题来自SICP,描述如下
现在若干纸币,想要兑换成硬币。硬币面值有1, 5, 10, 25, 50分的硬币。什么,没有25分的,我说的是美元。。。
问有多少种组合方式
这是介绍线性递归这个概念的时候的一个例子,很有意思。
算法嘛,很朴素啊,其主要思想如下
- 回合制,就是一次递归
- 每一次都可以选择兑换一个面值最大的,或者不兑换
- 剩下的将进入下一轮兑换,直到剩下的钱数为0
scheme的代码就不贴上来了,太简单太抽象。我们还是用C++吧
#include<iomanip>
#include<iostream>
using namespace std;
int coin_value[]={
0,1, 5, 10, 25, 50};
int coin_count[]={