Scratch列表背后的数学思维

2022-03-08 04:00陈新龙
电脑报 2022年8期
关键词:卡牌排序列表

陈新龙

数学的思维方式是编程的基础,今天和大家分享一道Scratch考级原题,我们一起来剖析列表背后的数学思维,探寻编程世界中的奥秘吧。

题目:小明同学想要做一个扑克牌游戏,他在卡牌列表中存了A、2、3……J、Q、K,表示扑克牌。程序运行后随机从卡牌列表中抽取三个数字,并将三个数值存入列表A中。小明想通过系统自动判断这三张牌是否为连续数字(顺子)。那么请你通过Scratch编程来帮助小明完成这个功能吧。

K和A两张牌不算连续,例如3、4、5属于连续的三个数字;每次运行代码后,小明首先会说出列表中抽取了哪三张卡牌,然后根据卡牌的结果判断三张牌是否连续的数字。答案为三个数是连续的/三个数不是连续的。

很多同学对于这样的题目,可能感觉无从下手,我们首先需要理解题目的意思,读懂题目并能将题目抽象转换为数学问题,是一项非常重要的能力。将题目简单化其实就是从1-13数字中,随机抽选三个数字,判断三个数字是否连续。那么如何判断三个数字是否连续呢?这是这道题目的考点。

具體方法有很多,第一种方法,寻找最大值和最小值,例如【4、3、5】这三个数字我们都能很直观地判断是连续的,最小值和最大值相差2就能确定三个数连续。转化为任意【a、b、c】三个数字,如果是连续的,那么必然有最大值减去最小值等于2,反之则不连续。

第二种方法,可以表述为如果符合公式:(最大值+最小值)=中间值×2,则为连续数。

第三种方法,先用排序法,将抽取的三个数字进行排序,再判断第一个数和第三个数差值是否为2即可,这个思路的本质和寻找最大值最小值一样。其实解决题目方法的本质就是将陌生的问题转化为已经熟悉的问题。

编写程序时我们就可以按照上述分析的思路选择自己熟悉的方法进行编写。

首先将1-13数字添加至卡组列表中,并且将数列中数字1、11、12、13替换为A、J、Q、K四个字母,卡组列表创建完成(如图1)。

新增两个列表A和列表B用于存放抽取的卡牌。通过三次循环,随机将卡组列表1-13项中抽取到的数字添加入列表A中,考虑到抽卡的过程中可能会出现字母卡牌,于是通过循环替换的方式将列表A中的字母替换回对应的数字存入列表B中(如图2)。

在列表B中设置最大值MAX和最小值MIN为第一项,通过循环对比的方式寻找出列表中最大值和最小值,将两个数字相减判断结果是否等于2,如果结果等于2表示三个数字是连续的,否则的话三个数字不是连续的。当然大家也可以尝试利用排序的方法来判断是否三个数字是连续的,这里小陈老师也就不再演示了(如图3)。

通过本题,我们不难发现其实解决问题的本质就是将陌生的问题转为为我们熟悉的问题,这种思维不仅在学习编程方面,还有在学习数学中都是非常有用的,也是锻炼我们问题解决能力的关键点。

猜你喜欢
卡牌排序列表
扩列吧
恐怖排序
万智牌“黑莲花” 卖出16万美元
节日排序
列表法解分式方程问题探索
列表画树状图各有所长
赶在炉石之前 卡牌之王:龙之战争
听过实时游戏吗?Chronos Conquest将发!
来做炼金术师!募资中!Alchemist Academy
2011年《小说月刊》转载列表