测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A26464. 上台阶楼梯有 n(100 > n > 0)阶台阶,上楼时可以一步上 1 阶,也可以一步上 2 阶,也可以一步上 3 阶,编程计算共有多少种不同的走法。输入输入的每一行包括一组测试数据, 即为台阶数 n。 最后一行为 0, 表示测试结束。输出每一行输出对应一行输入的结果, 即为走法的数目。样例输入1 2 3 4 0样例输出1 2 4 7

填空题 较难

题目描述

上台阶

楼梯有 n(100 > n > 0)阶台阶,上楼时可以一步上 1 阶,也可以一步上 2 阶,也可以一步上 3 阶,

编程计算共有多少种不同的走法。

输入

输入的每一行包括一组测试数据, 即为台阶数 n。 最后一行为 0, 表示测试结束。

输出

每一行输出对应一行输入的结果, 即为走法的数目。

样例输入

1
2
3
4
0

样例输出

1
2
4
7

参考答案

#include <bits/stdc++.h> using namespace std; //递推 int main() { long long a[105]; int x; a[1] = 1, a[2] = 2, a[3] = 4; for(int i = 4; i <= 100; ++i) a[i] = a[i-1] + a[i-2] + a[i-3]; while(cin >> x && x != 0) cout << a[x] << endl; return 0; }

答案解析

// 记忆化递归

#include <bits/stdc++.h>

using namespace std;

long long a[105];

long long solve(int x)//上x阶台阶的走法数量

{

   if(a[x] > 0)

       return a[x];

   if(x == 1)

       return 1;

   else if(x == 2)

       return 2;

   else if(x == 3)

       return 4;

   else

       return a[x] = solve(x-1) + solve(x-2) + solve(x-3);

}

int main()

{

int x;

while(cin >> x && x != 0)

cout << solve(x) << endl;

return 0;

}


上一题 下一题