大家好,今天开始我们就来做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~1 1~2 1~3 1~4 1~5 1~6 1~7 1~8 1~9 方案数 / 1 2 3 5 8 13 21 34 规律 / 1 2 1+2 2+3 3+5 5+8 8+13 13+21 很显然,这是一个经典的斐波那契数列
所以我选用了最简单的求斐波那契数列的方法—直接上数组循环求
当然,有些大佬用三个变量滚动求也是可以的,我这里就不详细说了
代码详解
先一波基础程序走起~
#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;
}
好了,今天的题目就分享到这里,感谢大家观看,若有不足,请指正
最后不要忘了给作者一个素质三连哦~