码迷,mamicode.com
首页 > 其他好文 > 详细

做题感悟:爬楼梯

时间:2018-11-28 00:25:17      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:不同   空格   识别   爬楼梯   iostream   color   因此   简单   params   

可能看到标题大家会很惊讶,毕竟这道题实在是太简单了,但是,我要讲的并不是这道题。

爬楼梯

总时间限制: 1000ms
 
内存限制: 
65536kB
描述

树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数
例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级
也可以第一次走两级,第二次走一级,一共3种方法。

输入
输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30
输出
不同的走法数,每一行输入对应一行输出
样例输入
    5
    8
    10
样例输出
    8
    34
    89
好吧,我还是简单说一下吧。这道题属于递归题中最为基础的一道关于拆分可能性的题,因此我们只要找到递归通式并确定出口就可以了。例如:爬到顶楼有两种情况,即爬一层和爬两层,因此可以得到递归通式f(n)=f(n-1)+f(n-2)。递归出口则是f(1)=1,f(2)=2 。由此,这道题就解完了。
那么,终于到了要讲的重点了:
  有人可能会发现一个问题:为什么我敢用cin,cout?
  其实我也不想用。。。
  但是,由于这道题没有给出数据组数,因此只能用循环读入的方法,而这里便用到了cin的最大的好处也是最大的缺点:cin读入时不识别空格,即刚开始遇到空格便跳过,读入中遇到空格便中断,由此我们就可以有效的避免scanf读入数据爆时间的尴尬境况。
  
  其实,cin和scanf各有各的优点,各有各的缺陷,例如:cin和scanf相比就无法读入大量数据。因此,只有合理使用,扬长避短,才能最大化优化代码。
最后,附上本题代码
#include<iostream>
using namespace std;
int a[35];
int pa(int x)
{
    if(x==1)
    {
        return 1;
    }
    else if(x==2)
    {
        return 2;
    }
    else
    {
        return pa(x-1)+pa(x-2);
    }
}
int main()
{
    int n;
    while(cin >>n)
    {
        cout << pa(n) <<endl;
    }
    return 0;
}

 

做题感悟:爬楼梯

标签:不同   空格   识别   爬楼梯   iostream   color   因此   简单   params   

原文地址:https://www.cnblogs.com/yufenglin/p/10029863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!