走楼梯

17 篇文章 0 订阅

走楼梯

Time Limit: 1000MS  Memory Limit: 65536KB
Problem Description
小虎发现走楼梯的时候一次上一个台阶比较惬意,一次上两个台阶比较高效,一次上三个台阶就很累人。
小虎是一个即注重质量又注重高效的人,于是他就在上楼梯的时候每步就只跨上一个台阶或两个台阶,
现在小虎想知道他这样上n阶的楼梯一共有多少种走法,但是他又不想亲身经历,只好求助于会编程的你,帮他解决这个问题了。
 
Input
第一行是T,表示接下来有T组输入,每组输入一个N(2 <= N <= 1000)
Output
对应每组输入输出一共有多少种走法。
Example Input
3
10
9
22
Example Output
89
55
28657

#include<iostream>
#include<algorithm>

using namespace std;

string stra(int ad,int index,string a){
    a[index] = (char)(ad%10 + 48);
    ad = ad/10;
    int in = index + 1;
    if(in >= a.length()){
        a.push_back('0');
    }
    int n = (int)(a[index+1] - 48);
    ad = ad+n;
    if(ad> 10){
        stra(ad,index+1,a);
    }else{
        a[index+1] = (char)(ad + 48);
        return a;
    }
}

string stradd(string a,string b){
    int lengtha = a.length();
    int lengthb = b.length();
    if(lengtha > lengthb){
        for(int i=0; i<lengthb; i++){
            int m = (int)(b[i] - 48);
            int n = (int)(a[i] - 48);
            int ad = n+m;
            if(ad < 10){
                a[i] = (char)(ad + 48);
            }else{
                a = stra(ad,i,a);
            }
        }
        return a;
    }else{
        for(int i=0; i<lengtha; i++){
            int m = (int)(a[i] - 48);
            int n = (int)(b[i] - 48);
            int ad = n+m;
            if(ad < 10){
                b[i] = (char)(ad + 48);
            }else{
                b = stra(ad,i,b);
            }
        }
        return b;
    }

}

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        string a="1",b="2",c;
        cin>>n;
        if(n == 2){
            c = "2";
        }else{
            for(int i=3; i<=n; i++){
                c = stradd(a,b);
                a = b;
                b = c;

            }
        }
        reverse(c.begin(),c.end());
        cout<<c<<endl;
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值