题目描述:
小明在凌空SOHO上班,想通过爬楼梯的方式锻炼,他爬楼梯的方式有3种,一步跨一层、一步跨两层或一步跨3层,但是由于身体原因,在爬楼梯的锻炼中,一步跨三层的方式只能使用一次,请问爬到第k层楼梯时共有多少种方式?
输入:输入一个整型数,表示楼梯级数
输出:输出一个整型数,表达式爬到该级数的方式个数,若有任何异常则返回-1.
#include <iostream>
using namespace std;
int climbStair(int n)
{
if(n<=0){
return 0;
}
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
if(n == 3){
return 4;
}
int num1 = 1;
int num2 = 2;
int temp=0;
for(int i = 3;i<=n;i++){
int tmp = num1 + num2;
num1 = num2;
num2 = tmp;
if(i == n-3){
temp=tmp;
}
}
int res=0;
if(n-3 == 1) res=num2+1;
if(n-3 == 2) res=num2+2;
else res = num2 + temp;
return res;
}
int main ()
{
int k=0;
cin>>k;
if(k<0){
cout<<-1<<endl;
return -1;
}
int res = climbStair(k);
cout<<res<<endl;
return 0;
}
以上是帮做的,正确性没有使用足够的测试用例验证。
网友评论