[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第68讲。
积木搭建楼梯,本题是2021年8月14日举办的第13届蓝桥杯青少组Python编程选拔赛真题。题目要求按照描述的规律搭建楼梯,请编程计算使用n块积木可以搭建几层完整的楼梯。
先来看看题目的要求吧。
一.题目说明
编程实现:
小蓝要使用相同大小的积木搭建楼梯,每层需要使用的积木块数量规律如下:
第一层需要使用1块积木;
第二层需要使用2块积木;
第三层需要使用3块积木;
依次类推;
第m层需要使用m块积木。
现在小蓝有n块积木,按照以上规律搭建楼梯,问一共可以搭建几层完整的楼梯。
如:n = 7,第一层使用1块积木,第二层使用2块积木,第三层使用3块积木,第四层时剩余1块积木,不能完整搭建第四层,故不算完整的一层。即一共可以搭3层完整的楼梯。
如下图:
积木块数小于层数,即不完整的一层
输入描述:
输入一个正整数n,表示积木块数
输出描述:
输出一个正整数,表示使用n块积木可以搭建几层完整的楼梯
样例输入:
7
样例输出:
3
二.思路分析
这是一道简单的计算题,涉及的知识点包括循环和运算。
本题中,每一层楼梯的积木块数量是一个自然等差数列,其公差为1。
我们只需要循环求和,从从第一层开始累加,并判断总积木数量是否 ≤ n,循环结束,就可以计算出完整的楼梯了。
关于求和,通常有如下两种方法:
-
循环求和
-
使用求和公式
循环求和比较简单,就是给定一个变量i,不停地增加并累加即可,这是我们在学习编程时使用最多的方法了。
使用求和公式则是数学思维,对于前m项,其前m项之和为:
s = (m + 1) * m / 2
有了这个公式,就相当于在不等式m * (m + 1) / 2 <= n中,找到最大的m。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们使用两种方法来编写程序:
-
循环求和
-
使用求和公式
1. 循环求和
根据前面的思路分析,编写代码如下:
代码比较简单,说明两点:
1). 循环条件是total <= n,不要漏了等于n的情况;
2). 循环结束,此时total > n,说明最后一层是无法搭建的,所以需要减去1,才是完整的楼层数。
2. 使用求和公式
使用求和,编写代码如下:
代码更加简单,意思和第一种方法一样,主要除法需要使用整除运算。
至此,整个程序就全部完成了,你可以输入不同的数字来测试效果啦。
四.总结与思考
本题代码在8行左右,涉及到的知识点包括:
-
循环语句,主要是while循环;
-
算术运算;
-
比较运算;
-
变量;
本题非常简单,代码也不多,注意两个细节,一是循环的结束条件,要考虑相等的情况,二是循环结束后,需要将楼层减去1。
很多同学可能会说,我还没有学到求和公式呢,实际上,非常的简单,运用数形结合的思想,只要理解了,你就再也忘不掉了。
以大家都熟悉的前10个数求和来说明:
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
可以将这个等式转化为一个几何图形问题,如图所示:
第一列1个小方块,第二列2个,...,第十列10个小方块,请问总共有多少个方块呢?
仔细观察上图,可以发现,它是一个非常规则的对称图形,可以将左下方的部分补充完整,如图:
如此一来,这就变成一个长方形了,不过行数变成了11,列数保持不变。每一行有10个小方块,一共有11行,所有总的方块数量为:
11 * 10 = 110
再用110除以2,结果就是55了。
推而广之,对于1到n之间的求和,可以将其变成一个 n + 1行n列的长方形,因此总的方块数量就是:
(n + 1) * n / 2
是不是非常的简单,非常的神奇,这其实就是多元思维的体现,也是我们学习编程时经常会提及的。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以移步至“超平的编程课”gzh。