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;
}
上一题
下一题