【信息奥赛题解】上台阶(详细分析题解 & C++ 代码)

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)icon-default.png?t=N7T8https://ybt.ssoier.cn/problem_show.php?pid=1190

 分析:

  1. long long d[110] = { 0 }; 定义了一个长整型数组 d,大小为110,初始值全部为0。int a; 声明了一个整型变量 a

  2. 主函数 (main):

    • 初始化 d[1]d[2]d[3] 分别为1, 2, 4,表示爬1、2、3级台阶的方法数。
    • 使用循环计算从4级到100级台阶的方法数,每一级的方法数是前三级台阶方法数之和。
  3. 输入和输出:

    • 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;
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值