楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
分析:递推一下都知道求斐波那契数列。
#include <cstdio>
using namespace std;
const int maxn=5000;
int a[2][maxn+1],n,p=1,q=0;
void print(int q){
int j=1;
while (!a[q][j]&&j<maxn) j++;
for (int i=j;i<=maxn;i++) putchar('0'+a[q][i]); //逐字符输出
}
void add(int q,int p){ //高精度加法
int g=0;
for (int i=maxn;i>=1;i--){
a[q][i]+=a[p][i]+g;
g=a[q][i]/10;
a[q][i]%=10;
}
}
int main(){
scanf("%d",&n); a[q][maxn]=1; a[p][maxn]=1;
if (!n)putchar('0');
if (n==1) putchar('1');
if (n<2) return 0;
for (int i=2;i<=n;i++){
add(q,p); q=1-q; p=1-p; //滚动数组
}
print(n%2); return 0;
}