取石子

题目描述:

取石子

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

X虽然很爱学习,但也有贪玩的时候。现在有N个石子,X每次可以取一个,两个,或三个。问一共有多少种不同的方法可以将这些石子取完。
对于两种不同的方法的定义:两种方法取得次数不一样,或者在第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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值