在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934 12553
Sample Output
718831 13137761
观察规律即可:
- 当N=1时:1 1
- 当N=2时:1 1 1
- 当N=3时:1 1 1 3
- 当N=4时:1 2 1 4
- 当N=5时:1 2 2 5
- 当N=6时:1 3 3 7
- ……
得出规律:f(n)=f(n)+f(n-i),其中i为此时循环的硬币币值,代码如下:
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<cstdio>
#define ll long long
const ll maxn=32770;
ll a,b,c,d,r[maxn];
int main(){
while(scanf("%lld",&a)!=EOF){
memset(r,0,sizeof(r));
r[0]=1;
for(int i=1;i<=3;i++){//第一层循环以币值为循环条件
for(int j=i;j<=a;j++){//第二层循环以当前硬币总数和为循环
r[j]+=r[j-i];
}
}
printf("%lld\n",r[a]);
}
return 0;
}