走楼梯
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;
}