小山猪,公众号喊你来做题

2020-06-15 17:43:36 浏览数 (1)

今天是迷你朱同学开学的日子,首先在这里祝他学业有成,早日成长成为巨朱。好了,现在我们开始进入正“题”吧,对,你没看错,今天的硬货就是一道

数学题。作为信息与计算科学(数学为主)的本科毕业生,不知道小山猪同学在看完题目之后有没有数学方面的解法呢?很期待你的解答哦,但是本文只能给出编程解法(不知道对不对,这还得请大家伙批评指教)。题干如下:

姚明上楼梯,每步可上一阶或者二阶或者三阶。他要上二十阶楼梯,但规定不能踩到第五阶(可能有地雷),也不能踩到第十阶(可能有狗屎),还不能踩到第十五阶(可能有火坑),有多少种不同的方法?

我想静静(不要问我静静是谁,跟她不熟)

。。。。。。

。。。。。。

。。。。。。

三十分钟过去了,算了,还是用编程递归来做吧。

我们想踏上第二十阶梯之前我们的脚在第几阶梯呢?那么就有从第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等于多少?

最后,附歌一首,祝诸君度过一个美好的周末。

0 人点赞