很久没有写题目代码了,这次写一个,粉丝会++吗?
前言
好,现在就来题目吧!
一、题目
- 问题描述
一个楼梯有 n 级,小苏同学从下往上走,一步可以跨一级,也可以跨两级。问:他走到第 n 级楼梯有多少种走法?
- 输入格式
一行一个整数 n
- 输出格式
一行 n 个整数,之间用一个空格隔开,表示走到第 1 级、第 2 级、……第 n 级分别有多少种走法。
- 数据范围与提示
0<n≤30
二、解题
1.来看题目
首先,我们可以一眼看出试出规律:1 2 3 5 8……它便是斐波那契数列了。所以我们会有两种做法:
第一种,正常递归,递归大家应该都会吧,那就没什么好讲的;
第二种,因为n<=30,所以我们也可以打表,可是事实证明我们学校的刷题网站不讲武德,数据肯定超过了30,所以我只得到一半的分数(不要学我,打表不好)。
2.解答题目
(1)递归做法:
#include <bits/stdc++.h>
using namespace std;
int fbnq(int n){
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
return fbnq(n-1)+fbnq(n-2);
}
}
int main(){
int n,i=1;
cin>>n;
while(i<=n){
cout<<fbnq(i)<<",";
++i;
}
return 0;
}
(2)打表做法:
首先,生成代码的部分:
#include <bits/stdc++.h>
using namespace std;
int fbnq(int n){
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
return fbnq(n-1)+fbnq(n-2);
}
}
int main(){
int n,i=1;
n=30;
while(i<=n){
cout<<fbnq(i)<<",";
++i;
}
return 0;
}
它的结果(不包含回车):
1,2,3,5,8,13,21,34,55,89,144,
233,377,610,987,1597,2584,418
1,6765,10946,17711,28657,4636
8,75025,121393,196418,317811,
514229,832040,1346269,
所以代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[31]={0,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269};
int n;
cin>>n;
for(int i=1;i<=n;++i){
cout<<a[i]<<" ";
}
return 0;
}
虽说没有拿到满分,但我相信不是我的问题,而是数据的问题。
总结
今天的问题是不是很简单呢~
毕竟我也只会这种简单题目呐……