刷题の记录——爬楼梯

很久没有写题目代码了,这次写一个,粉丝会++吗?


前言

好,现在就来题目吧!


一、题目

  • 问题描述

        一个楼梯有 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;
}

虽说没有拿到满分,但我相信不是我的问题,而是数据的问题。


总结

今天的问题是不是很简单呢~

毕竟我也只会这种简单题目呐……

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值