题目描述:
取石子
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
X虽然很爱学习,但也有贪玩的时候。现在有N个石子,X每次可以取一个,两个,或三个。问一共有多少种不同的方法可以将这些石子取完。
对于两种不同的方法的定义:两种方法取得次数不一样,或者在第i次时取得数目不一样。
对于两种不同的方法的定义:两种方法取得次数不一样,或者在第i次时取得数目不一样。
输入
输入整数N(N <=35),代表一共有N个石子。
输出
输出一个整数,代表有多少种方案。
示例输入
1 2 35
示例输出
1 2 1132436852
提示
第一眼看时完全没头绪,感觉很困难的样子,仔细看了后想了会儿才知道怎么做了。该题是给你一堆石子,然后让你依次取石子,每次只能取一个或二个或三个,直至石子取完,问这样的取法有多少个。给你石子数,你首先只能取一个或二个或三个,然后在剩余石子里再重复取一个或二个或三个,直至取完。做法是首先从石子数少的一堆石子开始取,然后推到石子数多的一对石子取,如在5个石子里取石子,你只要知道在4个、3个、2个石子堆里的取法,然后他们的和就是在5个石子的石子堆里的取法,而4个、3个、2个石子堆里取石子可以推到1个、2个石子堆里取石子,根据以上想法,有如下代码:
#include <stdio.h>
int main()
{
int f[35+1]={1,1,2};
int i,n;
while(scanf("%d",&n)!=EOF)
{
for(i=3;i<=n;i++)
f[i]=f[i-1]+f[i-2]+f[i-3];
printf("%d\n",f[n]);
}
return 0;
}