今天是迷你朱同学开学的日子,首先在这里祝他学业有成,早日成长成为巨朱。好了,现在我们开始进入正“题”吧,对,你没看错,今天的硬货就是一道
数学题。作为信息与计算科学(数学为主)的本科毕业生,不知道小山猪同学在看完题目之后有没有数学方面的解法呢?很期待你的解答哦,但是本文只能给出编程解法(不知道对不对,这还得请大家伙批评指教)。题干如下:
姚明上楼梯,每步可上一阶或者二阶或者三阶。他要上二十阶楼梯,但规定不能踩到第五阶(可能有地雷),也不能踩到第十阶(可能有狗屎),还不能踩到第十五阶(可能有火坑),有多少种不同的方法?
我想静静(不要问我静静是谁,跟她不熟)
。。。。。。
。。。。。。
。。。。。。
三十分钟过去了,算了,还是用编程递归来做吧。
我们想踏上第二十阶梯之前我们的脚在第几阶梯呢?那么就有从第17或者第18或者第19级阶梯走到第20阶梯这三种可能,如果用f(n)表示第n级阶梯的可能
数,则有f(20)=f(19) f(18) f(17),同理f(19),f(18),f(17)依次递归。如果要避免踏入第5,,10,15级阶梯,就只要令f(5)==f(10)==f(15)就好了。至于第一阶梯,第二阶梯,第三阶梯的可能数我们可以直接计算出来为1,2,3。
接下来就是写程序啦,程序如下(仅限cpp,其它版本的敬请诸君补充):
#include <stdio.h>
int f(int n);
void main()
{
int num=20;
printf("n",num,f(num)-f(5)-f(10)-f(15));
}
int f(int n)
{
if(n==1)
{
return 1;
}
else if(n==2)
{
return 2;
}
else if(n==3)
{
return 3;
}
else if(n==5 || n==10 || n==15)
{
return 0;
}
else
{
return f(n-1) f(n-2) f(n-3);
}
}
若有疏漏,欢迎诸位指教。抬爱抬爱。
还觉得不过瘾?好吧,我再留道思考题吧,以飨众卿。
若100除以10=10,14除以6等于2,那么12除以5等于多少?
最后,附歌一首,祝诸君度过一个美好的周末。