第39级台阶 蓝桥杯(C语言)
题目描述:
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
输出格式:
输出一个整数
既然一定是先迈左脚,最后一步迈的是右脚,说明左脚步数与右脚步数相等,也就意味着,总步数一定是偶数。
思路写于代码备注中:
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#include<stdio.h>
int sum=0;//设置宏变量sum,用于记录符合题意的总数
void UP(int stair,int walk)//stair用于记录上升的阶梯数,walk用于记录步数
{
if(stair>=40)
return ;/*如果超过了39,则不符合题目所述情况,结束该函数的本次调用*/
if(stair==39&&walk%2==0){
sum++;
return ;
}//上升39级阶梯,并且步数为偶数。符合题意,总数增加1后跳出函数。
/*下一步可能是向上走一步,也可能是向上走两步,所以分两种情况进行试探*/
UP(stair+1,walk+1);//向上走一步
UP(stair+2,walk+1);//向上走两步
}
int main ()
{
UP(0,0);//设定初始情况
printf("%d\n",sum);
return 0;
}
这种题目的特点是:穷举过程中变量变化不确定(本题里,有可能是1步,也有可能是2步)。就要分两种情况递推下去。这种穷举法的数据结构便是——二叉树。图例:
敬请批评指正!