楼梯有 𝑛n 阶,上楼可以一步上一阶,也可以一步上二阶。
但你不能连续三步都走两阶,计算走到第𝑛n阶共有多少种不同的走法。
输入格式
一行,一个数字,表示𝑛n。
输出格式
输出走楼梯的方式总数。
注意点:
1.剪去的部分有规律,mi[8]=f[8-1]「正好相差7」
2.注意前面的也要加上剪去的部分而不是未剪去的部分
#include <iostream>
#include <string.h>
using namespace std;
long long f[10010];
long long mi[10010];
int main() {
int n;cin>>n;
memset(mi, 0, sizeof(mi));
f[1]=1;f[2]=2;
for(int i=3;i<=50;i++)
{
if(i>=3&&i<6) f[i]=f[i-2]+f[i-1];
else if(i==6) f[i]=f[i-2]+f[i-1]-1;
else if(i==7) f[i]=f[i-2]+f[i-1]-1;
else f[i]=f[i-2]+f[i-1]-f[i-7];
}
cout<<f[n]<<endl;
return 0;
}