- 定位:2013年第四届蓝桥杯省赛C/C++ B组试题C
- 原题:第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级。站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。 - 属性:dfs+递归+模拟
- 难度:入门
- 独白:
这第三题有点意思上来了,终于开始了蓝桥杯的dfs题虽然这题只能算得上是dfs中的基础。
看完题干的描述,有很明显的递归含义在里面,按照题目描述,进行dfs尝试做一下,首先我们找到递归的突破口,这里我们找到两个突破口,一个是错误返回,一个是输出返回。当步数超过39时,错误返回,当步数等于39时还需要注意是否一共走了偶数步,同时满足两个条件,则方法(ans)+1。接着,我们开始寻找dfs的继承接口,一共有两个,一个是迈上一步,一个是迈上两步,无论是迈上一步还是两步,我们的迈数都得+1,但确实是两种不同的继承接口。捋清了递归的突破口和dfs的继承接口后,编写代码就容易多了,同时注意在模拟时要依据题干进行。(51167078) - 代码:
#include<iostream>
#include<cstdio>
using namespace std;
int N,sum;
int dfs(int num,int step,int n){
if(step>n){
return 0;
}
if(step==39&&num%2==0){
sum++;
return 0;
}
dfs(num+1,step+1,n);
dfs(num+1,step+2,n);
}
int main(){
cin>>N;
dfs(0,0,N);
cout<<sum;
return 0;
}
- 总结:基础的dfs题,我们只需要找到递归的突破口以及dfs的继承接口就可以迎刃而解了。
- 感悟:少议论他人的是非,多反思自己的得失。
- 归档:已归档。