• 马克思的手稿-第11届蓝桥杯Scratch选拔赛真题精选


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

    蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选了一部分题目进行解读。

    第11届蓝桥杯青少年组第6次选拔赛于原定于2020年2月15日举行,因为疫情延期到5月31日,形式为线上考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

    马克思的手稿,本题是2020年5月31日举行的第11届蓝桥杯Scratch选拔赛真题编程第5题,初级组和中级组都有此题,题目要求编程解决一道记录在马克思手稿中的数学趣题。

    先来看看题目的要求吧。

    一.题目说明

    背景信息:

    马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩。在一家饭馆吃饭共花了50先令;每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令;问男人、女人和小孩各有几人?

    编程实现:

    1). 当绿旗被点击,舞台右侧添加一个空列表,并且小猫说“点击一次空格键,列表中添加一组男人、女人、小孩人数的答案”,如下图;

    2). 接下来每点击一次空格,列表中就添加一组符合要求的数据,如下图;

    3). 当所有符合要求的数据都添加到列表之后,小猫说“全部找到了”2秒,程序结束;

    4). 再次点击绿旗,程序可以重复执行。

    评判标准:

    • 20分:完成右上图;

    • 20分:列表中能显示2组及以上符合要求的数据;

    • 40分:列表中能显示所有符合要求的数据;

    • 20分:点击绿旗能重复执行,且完全符合要求。

    二.思路分析

    本题只有1个角色,就是默认的小猫,如图所示:

    这是一道典型的枚举算法题,所谓枚举算法就是将所有问题的可能性一一列举出来,并判断是否符合给定条件。

    根据题目描述,我们可以得出如下两个条件:

    男人 + 女人 + 小孩 = 30
    男人 * 3 +  女人 * 2 + 小孩 = 50

    因此,我们可以将所有可能的组合都列出来,看看是否满足上述两个条件。典型的做法就是使用嵌套循环对每一种组合进行判断,将满足条件的组合存入到列表中。

    对于本题而言,每按一次空格键就获取一种组合,我们可以先将男人的数量设置为1,每按一次空格键就将数量增加1,这就相当于是外层循环。

    针对每一个确定的男人数量,我们需要对女人的数量进行循环判断,初始值也是1,有了男人数量和女人数量,就可以利用上面的第一个条件,计算出小孩的数量,然后根据第二个条件,将对应的组合存入列表。

    我们可以使用如下流程图来表示这个过程:

    需要注意的是,男人和女人数量的范围,题目明确说明在30人中有男人、女人和小孩,所以男人和女人的最小值必定为1,最大值呢?

    一般我们都会这么思考,每个男人花了3先令,总共是50先令,假定都是男人,那么男人的数量要小于 50 /3,也就是男人数量的最大值是15,同理我们可以计算出女人数量的最大值是25。

    实际上,我们还可以缩小男人数量的范围,将上面的两个条件等式相减可得:

    男人 * 2 + 女人 = 20

    从这个等式中,我们很容易得出男人的数量不超过10,女人的数量不超过18,范围缩小了,程序的效率就提高了。

    三.编程实现

    根据题目描述和思路分析,我们可以分两步来编写程序:

    • 准备工作及初始化

    • 按下空格键添加一组数据

    1. 准备工作及初始化

    创建3个变量,分别命名为“男人”、“女人”和“小孩”,如图所示:

    再创建一个列表,将其命名为“男女小孩”,如图所示:

    当点击绿旗时,将列表清空,将“男人”设为1,同时提示用户按空格键添加一组答案,在小猫角色中编写代码如下:

    2. 按下空格键添加一组数据

    根据思路分析中的流程图,编写代码如下:

    代码是根据流程图来写的,但是有两个地方不一样,需要说明一下:

    1). 这里只使用了一层循环,原因在于每按下一次空格键,代码就执行一次,男人的数量也增加1,其效果和循环是一样的;

    2). 由于循环的次数是确定的,所以这里直接使用了”重复执行18次“,这么写比使用”重复执行直到“指令更简单。

    四.总结与思考

    本题难度系数为4,积木块数量35个左右 ,涉及到的知识点主要包括:

    • 变量和列表的使用;

    • 说话指令,注意两种不同形式的区别;

    • 运算符指令,包括算术运算、比较运算和字符连接运算;

    • 枚举算法的编程思想及实现方式。

    本题有一定难度,重点是理解枚举算法的编程思想,掌握枚举算法的实现方式。同时要结合数学知识,简化代码结构,优化代码效率。

    不知道你发现了没,这道题和著名的百钱百鸡问题非常类似,题目是这样的,公鸡每只5元,母鸡每只3元,三只小鸡1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?有兴趣的同学可以挑战一下。

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

    需要素材和源码的,可以联系本人,或者移步至同名wx号。

  • 相关阅读:
    Java基础之《undertow容器》
    Win10安装DBeaver连接MySQL8、导入和导出数据库详细教程
    解决 pdf.js 出现 TypeError: key.split(...).at is not a function 报错问题
    【Android安全】Frida 指定classloader | hook动态加载的类 | 安卓多apk hook
    基于非支配排序遗传算法的多目标水光互补优化调度附Matlab代码
    cefsharp 93.1.140 如何在js中暴露c#类
    java 基于springBoot上传文件/文件夹使用实例
    MySQL篇—事务和隔离级别介绍
    React问题:LocalStorage 在提交后不显示数据并且状态在刷新时不能持续存在的问题
    算法高级部分--并查集
  • 原文地址:https://blog.csdn.net/diamondwang2012/article/details/128143935