题目标题: 第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,
他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交
替,最后一步是迈右脚,也就是说一共要走偶数步。那么,
上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。
注意:不要提交解答过程,或其它的辅助说明文字。
解题思路:
适用模式匹配法!
去掉一个条件,(偶数步那个条件)
在每次只上1个或2个台阶的条件下有多少中走法?
#include <stdio.h>
int c[40][2];//0为左脚,1为右脚。。
int main(){
int i;
c[0][0] = c[1][1] = 0;
c[0][1] = c[1][0] = 1;
for(i = 2; i <= 39; ++i){
c[i][0] = c[i - 1][1] + c[i - 2][1];
c[i][1] = c[i - 1][0] + c[i - 2][0];
}
printf("%d\n", c[39][1]);
return 0;
}
相对于视频所讲的方法,这个效率更高点,下面是视频所讲的代码运行时间94s;
#include<stdio.h>
//f(n-39)[return f(n-1)+f(n-2)]
/*
* n 剩下的步数
* step 已走的步数
*/
long count=0;
void f(int n,int step)
{
if(n<0)
return;
if(n==0&&step%2==0)
count++;
f(n-1,step+1);
f(n-2,step+1);
}
int main()
{
f(39,0);
printf(count);
return 0;
}
适用递归函数求解!