趣味数学

2021-07-30 15:35
电脑报 2021年28期
关键词:数目空格数轴

今天和大家分享一道特别有意思的信息奥赛题目:学校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,馬路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

【输入文件】首先在文件的第一行输入两个整数L(1<=L<=10000)和M(1<=M<=100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。输出马路上剩余的树的数目。

题目分析

其实在阅读题目后,本想用Scratch来做,可是实际操作发现这个题目并不是那么的简单,因为Scratch没有像Python那样可以分割字符串的空格,Scratch只能按照空格前后区分,这导致整体代码量太大,而且代码效率太低了。在思考了许久后,还是选择了Python来进行解答。这样不仅编程比较方便代码量也大大减少,而且还通俗易懂。

首先需要输入的是两个代表马路的长度和区域的数目。马路长度可以确定总共的树木的数量,例如马路长为500,那么树木的数量为500+1=501(左端从0开始)。那么问题就来了,如何保证把其中某些区域的树给移动走,并且考虑区域之间树的重合关系。首先我们可以把501棵树木全部附上一个值(True),然后通过遍历循环区域数目次数,把指定区域的树由True变成False。在原有的基础上进行覆盖。最后进行累加便得到了最终总棵树为298棵。

运用Python做出来的效果清晰明了。反过来大家可以思考一下已知Python的代码,是否我们可以转化成Scratch的代码呢?是否还有更加简单的代码呢?一起来动动脑筋吧。

猜你喜欢
数目空格数轴
移火柴
趣填成语
略知一二
智慧填数
如何学好数轴
牧场里的马
“实数”检测题
数轴上的小数
探索法在数学趣题中的应用