在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
Input
每行只有一个正整数N,N小于32768。
Output
对应每个输入,输出兑换方法数。
Sample Input
2934
12553
Sample Output
718831
13137761
问题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284
问题解析:
一开始的想法是三个for直接解决,但是TLE了,然后想到无论3和2取多少,1都可以随便用,于是改成了两个for,但是还是TLE,后来想到用一个for来解决,先确定3的个数即3*i,其他的用2来补充,即(m-(3*i))/ 2,剩下的用1,需注意的是可以只用3和1不使用2,所以在(m-(3*i))/2后面+1表示用3和1的方法。
AC通过的c++程序如下:
#include<iostream>
using namespace std;
int main()
{
int m;
while(cin >> m)
{
int c=0;
for (int i = 0; i<=m/3; i++)
{ if((m-(3*i))%2==0)
c+=(m-(3*i))/2+1;
else c+=(m-(3*i)-1)/2+1;
}
cout <<c<<endl;
}
}