硬币的表示法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/moses1213/article/details/52143673

题目:给定数量不限的硬币,币值为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;
}


猜你喜欢

转载自blog.csdn.net/moses1213/article/details/52143673