问题如下:
给你价值为n的钱币,现在让你兑换成1分,2分,3分的钱币,问有多少种兑换方法;
这种问题大家第一想到的一定是暴力求解,但还有一种温和的方法。。
具体问题具体分析,假如确定了3分钱币的个数,哪家只剩下2分的和1分的如何组合,每个2分的钱币可以转化为2个1分的钱币,2分钱币有几个,组合就有几个。
比如说有20分钱,有一个3分的。
剩下17分,
17 / 2=8;
2 2 2 2 2 2 2 2 1
2 2 2 2 2 2 2 1 1 1
2 2 2 2 2 2 1 1 1 1 1
以此类推,你每抖开一个2就是一种组合,所以。。。
代码如下:
#include<stdio.h>
int main()
{
int N;
while(~scanf("%d",&N))
{
int i,j,k,l=0;
for(i=0; i<=N/3; i++)
{
k=(N-i*3)/2;
l+=k+1;
}
printf("%d\n",l);
}
return 0;
}