做题感悟:爬楼梯

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

爬楼梯

总时间限制: 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;
}

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

时间: 2024-10-20 04:19:08

做题感悟:爬楼梯的相关文章

力扣第70题:爬楼梯

力扣第70题:爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶. 1 阶 + 1 阶 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶. 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶 ? int climbStairs(int n) { if (n <= 1) { re

做题感悟:全排列

好的,我们来看这道题 全排列 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列. 输入 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间. 输出 输出这个字符串的所有排列方式,每行一个排列.要求字母序比较小的排列在前面. 很显然,这是一道可以用很

做题感悟:放苹果

其实,这道题在一开始我就想到了正确解法的一部分,但是因为某闫同学而否定了自己(毕竟只想到了一部分). 好的我们先来看一下这道题: 放苹果 总时间限制:  1000ms 内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输入 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. 输出 对输入的每组数

做题感悟(PlayGrounds决策树关卡)

1.很重要的编程思想,分解问题,重组代码 2.做下图这道题的时候,总想着一步解决,在一个循环里解决所有问题,应该是拆分分支路线,在主路线重组分支路线代码,在合并 原文地址:https://www.cnblogs.com/zhifeiji822/p/12420967.html

面试算法题:爬楼梯,N级楼梯有多少种走法?

By Long Luo 个人博客链接 最近去面试时,在一家小公司面试时,公司小BOSS给我出了一道算法题: 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,要求编写程序,求总共有多少种走法. 这个问题应该是一个很老的题目了,用中学数学来说,就是一个排列组合问题.当时拿到这个题目之后,首先想到使用递归的思想去解决这个问题: N级楼梯问题可以划分为:N-1级楼梯,N-2级楼梯,N-3级楼梯的走法之和. 先计算下0,1,2,3及楼梯有多少种走法: 1 --> 1 2 --> 11 2

【leetcode 简单】第十八题 爬楼梯

假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶. 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶. 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 class Solution(object): def climbStairs

校招真题练习006 爬楼梯(小米)

爬楼梯 题目描述在你面前有一个n阶的楼梯,你一步只能上1阶或2阶.请问计算出你可以采用多少种不同的方式爬完这个楼梯. 输入描述:一个正整数n(n<=100),表示这个楼梯一共有多少阶输出描述:一个正整数,表示有多少种不同的方式爬完这个楼梯 1 n = int(input().strip()) 2 if n == 1: 3 print('1') 4 elif n == 2: 5 print('2') 6 else: 7 dp = [0] * (n+1) 8 dp[1] = 1 9 dp[2] =

Jarvis OJ - 爬楼梯 -Writeup

Jarvis OJ - 爬楼梯 -Writeup 本来是想逆一下算法的,后来在学长的指导下发现可以直接修改关键函数,这个题做完有种四两拨千斤的感觉,记录在这里 转载请标明出处:http://www.cnblogs.com/WangAoBo/p/7222012.html 题目: 分析: 先看apk的外部特征,在模拟器中安装apk,如下: 每次点击爬一层楼按钮以爬的楼层会加1,爬到了,看FLAG按钮点击无效,于是猜测需要爬到指定的楼层才可以看到flag. 首先大致浏览apk的java代码(这里使用的

菜鸡学算法--70. 爬楼梯

先来看题目: 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方法可以爬到楼顶.1. 1 阶 + 1 阶2. 2 阶 示例 2: 输入: 3输出: 3解释: 有三种方法可以爬到楼顶.1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶 作为一个菜鸡,看到题目直接懵逼,思路混乱. 解题大招: 首先,计算可执行的逻辑最后