————————————————————————————————————
⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大三学生。
⏩最近在准备秋招,一直在练习编程。
⏩本篇文章对赛码网的上台阶 题目做一个详解。
⏩感谢你的阅读,不对的地方欢迎指正。
————————————————————————————————————
题目:
解题思路:
通过定义一个名为count_ways
的函数来计算不同楼梯级数的走法数量,并通过调用这个函数来填充一个名为ways
的数组。
count_ways
函数中首先给ways
数组初始化一些已知的走法数量,例如ways[1] = 0
、ways[2] = 1
和ways[3] = 2
。这些值是基本的初始情况,可以作为后续计算的基础。- 使用循环从4开始遍历到40,逐一计算
ways[i]
(i大于等于4)的值。对于每个i
,它的走法数量等于前一级楼梯(ways[i-1]
)的走法数量加上上上级楼梯(ways[i-2]
)的走法数量。 - 最后,将计算得到的走法数量保存在
ways
数组中。
在主函数main
中,你首先读取输入的测试实例个数n
。然后调用count_ways
函数来计算不同楼梯级数的走法数量,并将结果保存在ways
数组中。接下来,通过循环读取每个测试实例中的楼梯级数m
,并直接从ways
数组中获取相应的走法数量,并将结果打印出来。
代码如下:
#include <stdio.h>
void count_ways(int *ways)
{
ways[1] = 0;
ways[2] = 1;
ways[3] = 2;
for(int i = 4; i <= 40;i++){
ways[i] = ways[i-1] + ways[i-2];
}
return ;
}
int main()
{
int n,m,ways[50];
scanf("%d",&n);
count_ways(ways);
for(int i = 0;i < n;i ++){
scanf("%d",&m);
printf("%d\n",ways[m]);
}
return 0;
}