【GZOJ】1369——小明跳楼梯
来源:互联网 发布:win10清理垃圾软件 编辑:程序博客网 时间:2024/06/11 07:21
题目链接:广大OJ1369
本题亦为广大15级第一次周赛的B题。
题目内容
Problem Description
小明很喜欢跳楼梯。
他可以一次跳一阶楼梯(记为1),也可以一次跳两个台阶(记为2)。
那么问题来了。小明跳三个台阶共有几种方法?
答案很简单,一共三种。
分别是:111,12,21。
换成语言描述就是:连跳三阶楼梯,跳一阶后再一次跳两个台阶,一次跳两个台阶后再跳一阶,共三种。
以此类推,小明跳四个台阶就一共有五种,分别是:1111,112,121,211,22。
那么问题来了。小明跳n阶台阶共有几种方法?
Input
有多组输入数据。
每组数据共一行,为一个整数n(1<=n<=70)
Output
对于每组输入数据,输出一个整数m,m为小明跳n阶楼梯的方法数。
Sample Input
1
2
4
Sample Output
1
2
5
Hint
于是小明就孤独一生了。
可喜可贺可喜可贺。
解题思路
本题有两种方法:
1.观察规律。小明跳一阶楼梯有1种方法,跳两阶楼梯有2种方法,跳三阶楼梯有3种方法,跳四阶楼梯有5种方法,依次类推,接下去的方法数为8,13,21,34,。。。。。。。
不难发现这是一个斐波那契数列,于是就可以直接按求斐波那契数列的公式来算。
2.求递推公式。利用状态转移的思想。假设小明跳n阶楼梯会有F[n]种方法,那么小明跳这n阶楼梯的所有方法可以分为两类:
一,最后一步为跳一阶的方法
二,最后一步为跳两阶的方法
最后一步为跳一阶的方法除去最后一步就是跳n-1阶楼梯的方法数,最后一步为跳两阶的方法除去最后一步就是跳n-2阶楼梯的方法数。
所以便可以得到如下递推式:
F[n]=F[n-1]+F[n-2]
然后把特殊情况列出来(因为上式对n=1和n=2的情况不适用),于是就可以在算这道式子之前先初始化F[1]为1,F[2]为2。(当然也可以初始化F[0]=1,F[1]=1)
最后你会发现,这个推出来就是斐波那契数列的递推式。
代码
#include<cstdio> int n;long long a[80];int main(){ a[1]=1; a[2]=2; for(int i=3;i<=70;i++) a[i]=a[i-1]+a[i-2]; while(scanf("%d",&n)==1) printf("%lld\n",a[n]); return 0;}
- 【GZOJ】1369——小明跳楼梯
- 【GZOJ】1372——阶乘
- 【GZOJ】1367——A*B问题
- 【GZOJ】1368——爱迪生的烦恼
- 【GZOJ】1371——杨辉三角
- 【GZOJ】1374——口袋妖怪对战
- 【GZOJ】1308——开灯关灯
- 【GZOJ】1314——异或最大值
- 【GZOJ】1370——名为F的数列
- 【GZOJ】1373——凹酱的行程
- HTML游戏实战之《跳楼梯》
- 为了相同的前缀-跳楼梯
- 面试编程题-青蛙跳楼梯问题
- 工作压力是恶魔——华为跳楼员工身份确认 生前念大学留下大量债务
- SDUT 3069 为了相同的前缀-跳楼梯
- 关于跳楼
- 跳楼指数
- 跳楼吧
- 内部类---静态内部类和非静态内部类
- 自定义控件(22)---FloatView悬浮窗(1)
- 为shell命令设置超时
- 线程 (并发 互斥 同步 并行 多线程 异步)
- Linux 磁盘分区、格式化、挂载、查看操作
- 【GZOJ】1369——小明跳楼梯
- HTML DOM getElementsByTagName() 方法
- hdoj--4857--逃生(拓扑排序+反向建图)
- 最近知识小节
- poj3083Children of the Candy Corn
- 游戏服务器端开发要点
- 认识Java
- 爬爬爬之路:UI(六) UISegmentedControl UISlider NSTimer的简单应用
- springmvc006-处理模型数据