1190:上台阶
时间限制: 1000 ms 内存限制: 65536 KB
提交数:80485 通过数: 27861
【题目描述】
楼梯有n𝑛(0<n<710<𝑛<71)阶台阶,上楼时可以一步上11阶,也可以一步上22阶,也可以一步上33阶,编程计算共有多少种不同的走法。
【输入】
输入的每一行包括一组测试数据,即为台阶数n𝑛。最后一行为00,表示测试结束。
【输出】
每一行输出对应一行输入的结果,即为走法的数目。
【输入样例】
1
2
3
4
0
【输出样例】
1
2
4
7
【原题链接】
信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)https://ybt.ssoier.cn/problem_show.php?pid=1190
分析:
-
long long d[110] = { 0 };
定义了一个长整型数组d
,大小为110,初始值全部为0。int a;
声明了一个整型变量a
。 -
主函数 (
main
):- 初始化
d[1]
,d[2]
,d[3]
分别为1, 2, 4,表示爬1、2、3级台阶的方法数。 - 使用循环计算从4级到100级台阶的方法数,每一级的方法数是前三级台阶方法数之和。
- 初始化
-
输入和输出:
while (scanf_s("%d", &a) == 1 && a)
循环读取输入的整数a
,直到a
的值为0为止。- 对于每个输入的
a
,输出d[a]
,即爬a
级台阶的方法数。
#include<cstdio> //标准输入输出
#include<iostream> //C++标准输入输出流
#include<cmath> //数学函数
#include<cstring> //字符串函数的头文件
long long d[110] = { 0 };
int a;
int main()
{
d[1] = 1; //1个台阶方法数为1
d[2] = 2; //2个台阶方法数为2
d[3] = 4; //3个台阶方法数为4
for (int i = 4; i <= 100; i++) //计算上每级台阶的方法数
d[i] = d[i - 1] + d[i - 2] + d[i - 3];
//在之前的基础上递推,上该台阶的方法数量就是前三级台阶的方法总和
while (scanf("%d", &a) == 1 && a)
printf("%lld\n", d[a]);
return 0;
}