龙空技术网

加油问题-第10届蓝桥杯Scratch国赛真题第5题

超平的编程课 57

前言:

此时大家对“蓝桥杯题目及答案”可能比较关注,咱们都需要学习一些“蓝桥杯题目及答案”的相关内容。那么小编同时在网络上汇集了一些关于“蓝桥杯题目及答案””的相关知识,希望看官们能喜欢,咱们快快来学习一下吧!

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第18讲。

第10届蓝桥杯青少年组国赛于2019年5月25日举行,形式为线下考试,考生自带电脑。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

加油问题,本题是第10届蓝桥杯Scratch国赛真题编程第5题,题目要求考生编写程序帮助小猫找出在哪些加油站停靠加油(每次都加满油)才能使得沿途加油次数最少。

先来看看题目的要求吧。

一.题目说明

编程实现:

小猫打算在“五一”假期骑摩托车自驾游,摩托车每次加满油后可以行驶100公里,它在自家附近的加油站加满油后就上路了,上路之后还要顺序经过“1号”-“6号”的6个加油站,每个加油站到上一个加油站的距离分别是50、80、39、60、40、32公里。因为“五一”期间各加油站都有很多车要加油,所以小猫希望尽量减少加油的次数。请帮助小猫找出在哪些加油站停靠加油(每次都加满油)才能使得沿途加油次数最少。

注意:如果摩托车剩下的油不够行驶到下一个加油站时,就必须要在这个加油路加油了!

具体要求:

1). 创建两个列表,列表“距离”用于存放各个加油站距离的数值,将50、80、39、60、40、32依次添加到列表中;列表“停靠”有6个元素,用于标记在哪个加油站停靠加油。每次点击绿旗时,都要将“停靠”列表中的6个元素初始化为“0”,然后让小猫说“开始出发”2秒。如图1所示:

图1

2). 小猫需要指出应该在哪个加油站停靠加油。例如,小猫需要在第1个加油站加油(因为到第2个加油站还有80公里,而摩托车的油只够再骑50公里了),就让小猫说“在1号加油站停靠加油”2秒,同时将“停靠”列表中的第1个元素值修改为1,然后继续说出下一个需要加油的加油站(见图2),当到达目的地时,让小猫说“到达目的地”2秒,然后程序结束。

图2

赛后判卷时,在裁判修改了列表“距离”中的数值以后,重新点击绿旗后,能够以新的数值重新计算,并让小猫说出合理的停靠加油方案,使得加油的次数最少。

评判标准:

10分:符合具体要求1),即点击绿旗后“距离”列表中的各元素依次是50、80、39、0、40、32,“停靠”列表中的各元素值都是0,小猫说“开始出发”2秒;30分:在10分标准的基础上,符合具体要求2),即小猫正确说出在哪个加油站加油,并且在说出“到达目的地”后,“停靠”列表的每一个数值均正确;60分:在30分标准的基础上,符合具体要求3)。即赛后判卷时,在裁判修改“距离”的数值后,能够以新的数值计算新的停靠加油方案,使得加油的次数最少。二.作品效果

在编程之前,先来看看作品的完整效果吧:

视频加载中...

三.思路分析

本题的逻辑其实很简单,就是每到一个加油站,都需要判断摩托车里剩余的油能否确保行驶到下一个加油站,如果够的话,就不用加油,继续行驶,否则的话,就需要在这一站加油。

很显然,除了题目给出的两个列表,我们需要使用两个变量,一个用来表示几号加油站,从第1站开始直到第6站,另一个则是剩余油量,这是我们判断是否加油的重要条件。

四.编程实现

根据上述思路分析,我们分两步来编写程序:

列表和变量的初始化循环判断完善逻辑

1. 列表和变量的初始化

根据题目描述,这里有两个列表,一个表示加油站,一个表示是否停靠加油,先创建好两个列表,并向列表中添加好数据。同时,创建两个变量,分别命名为”加油站“和”剩余油量“,并将初始值分别设为1和100。

为了增强代码的可读性,我们可以将这部分代码定义到一个自制积木,如图所示:

有的同学可能会有疑问,直接在列表中加入数据不就行了么,为什么还要使用代码的方式呢?

这么做的好处就在于,任何时候,只要点击绿旗,就可以确保数据是正确的,你再也不用担心由于误操作导致列表数据被修改了。

2. 循环判断

接下来,就可以从第1个加油站开始判断了,不过需要注意的是,小猫出发的时候,是加满了油的,此时的油量是100公里,当到达第一站的时候,需要先减去到第一站的距离,从而得到新的剩余油量,然后再判断是否能到达下一站,这部分的代码如图所示:

对于这段代码,简单说明如下:

1). 这里的重复条件是”加油站 > 5“,也就是只判断前面5个加油站,第6个加油站无需判断,因为这是列表的最后一项,可以认为是到达终点了。

2). 每到一个加油站,我们需要先计算出当前剩余油量,接着再判断是否能到下一站,所以这里的判断条件是”剩余油量 < 距离的第加油站 + 1 项“。

3). 如果在本站加油,就需要将停靠列表中对应项的值修改为1,同时将剩余油量设置为100,表示加满油了。

3. 完善逻辑

对于当前给出的列表数据,上面的代码完全ok,如果我们修改列表中的数据,比如将第一项数据50改成110,会出现什么情况呢?

很显然,一旦距离超过100公里,摩托车就无法到达,针对这种情况,可以增加一个判断,让程序停止下来,代码也比较简单,如下:

将这个代码放到”重复执行直到“指令中就可以了,注意要放到最前面。

五.总结与思考

本题代码不多,一共40个积木块左右,涉及到的知识点包括:

列表的操作,包括删除、添加和修改数据等常见操作;直到循环的使用;运算符的综合使用,包括算术运算符、比较运算符和字符串连接运算符;自制积木的应用。

本题所描述的场景在我们日常生活中十分常见,这不仅是数学在生活中的体现,也是编程在生活中的应用。由于本题给出的数据量比较小,所以感觉不到程序的优势,如果数据量增加100倍,你就能体会到程序的强大之处了。

人们常说”艺术源于生活而高于生活“,编程也是如此。所以,我们在学习编程时,也要善于观察生活、体验生活,将生活和编程结合起来,这样你就可以更好的理解和运用编程了,同时能更好地体会编程的魅力。

如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。

标签: #蓝桥杯题目及答案 #蓝桥杯题目及答案java