51nod—2059:上台阶

大家好,今天开始我们就来做51nod的习题了  欢迎订阅专栏


目录

 

性能要求

题目描述

输入

输出

数据范围

输入样例

输出样例

样例解释

思路分析

代码详解 

最终代码


 

性能要求

1.0 秒 ,131,072.0 KB

题目描述

现在小瓜想通过台阶走上平台,最底层(小瓜所在的层)编号为1,最顶层编号为n。由于小瓜的腿比较短,他一次只能向上走1级或者2级台阶。小瓜想知道他有多少种方法走上平台,你能帮帮他吗?

输入

一个整数n,其中2≤n≤25。

输出

一行一个整数,表示小瓜上台阶的方案数

数据范围

对于12%的数据,2≤n≤5;
对于28%的数据,2≤n≤10;
对于100%的数据,2≤n≤25;

输入样例

4

输出样例

3

样例解释

从台阶1到台阶4,可能方案有:

1→2→3→4,1→2→4,1→3→4,共3种。

 

思路分析

我们可以通过列表来发现规律:

台阶数1~11~21~31~41~51~61~71~81~9
方案数   /12358132134
规律   /121+22+33+55+88+1313+21
………………(以此类推)

很显然,这是一个经典的斐波那契数列

不懂的可以点这个链接了解https://baike.baidu.com/item/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97/99145?fr=aladdin

所以我选用了最简单的求斐波那契数列的方法—直接上数组循环求

当然,有些大佬用三个变量滚动求也是可以的,我这里就不详细说了 


 

代码详解 

先一波基础程序走起~

#include<bits/stdc++.h>
using namespace std;
int main()
{

    return 0;
}

 定义变量……(当然,这个数组有点大,可以放全局里)

int n;//输入的台阶数
int a[100001];//存放斐波那契数列的数组

输入……

cin>>n;

我们知道,斐波那契数列的每一项都等于前两项之和,而前两项需要我们手动给初值

a[0]=a[1]=1;

接下来就是求斐波那契数列的部分了,安排个循环

for(int i=2;i<=n;i++)
		a[i]=a[i-1]+a[i-2];//斐波那契数列的每一项都等于前两项之和

最后输出即可

cout<<a[n-1]<<endl;

注意,为什么是a[n-1]而不是a[n]呢?

因为通过上面的表格我们发现,输入的台阶数其实是第一阶到第n阶,一共上了(n-1)阶台阶

最终代码

#include <bits/stdc++.h>
using namespace std;
int n,a[100001];
int main() 
{ 
	cin>>n;
	a[0]=a[1]=1;
	for(int i=2;i<=n;i++)
		a[i]=a[i-1]+a[i-2];
	cout<<a[n-1]<<endl;
    return 0;
}

好了,今天的题目就分享到这里,感谢大家观看,若有不足,请指正

最后不要忘了给作者一个素质三连哦~ 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星河依旧长明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值