硬币的表示法

来源:互联网 发布:欧洲为什么发达 知乎 编辑:程序博客网 时间:2024/05/22 00:12

题目:给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。

思路:这个问题真的非常有意思,需要用到递归的思想。假设现在有50分,求它的表示法。(1)50分可以用0个25分硬币,这下剩下的问题就是50分用10分、5分和1分表示;(2)50分用1个25分表示,问题转化为25分用10分、5分和1分表示;(3)50分用2个25分表示,这时候返回1。

所以可以看到这是一个递归的过程,刚开始时总是用25分硬币表示,递归一层后首选用10分来表示,所以递归函数的参数应该包括币的面额。每次递归之后总是跳转到用比当前小一点的面额表示,从25分跳转到10分,10分跳转到5分,5分跳转到1分,到用1分的时候,递归应该终止了,返回1,因为不管多少分用1分表示总是只有1种方法。

int MakeChange(int n, int denom){int nextDenom = 0;switch(denom){case 25:nextDenom = 10;break;case 10:nextDenom = 5;break;case 5:nextDenom = 1;break;case 1:return 1;}int ways = 0;for(int i = 0; i*denom <= n; ++i)ways += MakeChange(n-i*denom, nextDenom);return ways;}


0 0
原创粉丝点击