可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶,有的时候一次爬三个台阶。如果这个楼梯有36个台阶,小明一共有多少种爬法呢?
解题思路:用f(n)代表n个台阶的总爬法数
具体分析 第一步 1 2 3 三种
f(n) 第一步登1个台阶 有 f(n-1) 种登法
f(n) 第一步登2个台阶的话 有f(n-2)种登法
f(n) 第一步登3个台阶的话 有f(n-3)种登法
题目一步最多登3个台阶,所以f(n) = f(n-1)+f(n-2)+f(n-3) (n>4)
1个台阶 就{1}1种爬法 f(1) = 1
2 个台阶 有{11,2} 2种爬法 f(2) = 2
3个台阶 有{111,12, 21 , 3} f(3)=4
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, const char * argv[])
{
int n;// 总 n 台阶 一次最多上3个台阶
vector<long> vWay; //存放
vWay.push_back(0);
vWay.push_back(1);
vWay.push_back(2);
vWay.push_back(4);
cin >> n;
for (int i=4; i<=n; i=i+1) {
long s = vWay[i-3] + vWay[i-2] + vWay[i-1];
vWay.push_back(s);
}
cout << n << " ";
cout << vWay[n] << endl;
return 0;
}