一道程序猿笔试面试必会题怎样用scratch做出来?
很多家长觉得scratch太简单了,只需要拖拽封装好的积木块就可以了。而我们scratch老师则会回应,scratch是低门槛高上限的,是没有天花板的……为什么这么说,我们今天就看一看用scratch怎么来做一道程序猿笔试面试必须要会的一道题——排序!
题目的任务叙述很简单:对一个已知数组,按照从小到大(或大到小)排序
用scratch我们可以很快让计算机给出任意数组,比如,可以有10个任意数字
工作:(1)建一个列表【L】; (2)列表通常的初始化工作——删除全部项目; (3)重复10次插入1-100的任意自然数
这样我们就有了10个任意数
接下来,就是排序了。程序猿考试考的是算法,什么冒泡排序、选择排序、插入排序等等。一个优秀的算法能使程序的性质带来质的飞跃,在scratch里面同样可以用这些算法来解决问题(谢声涛《scratch趣味编程进阶——妙趣横生的数学和算法》书中第12章“扑克学算法”就将这些算法描述得非常透彻)。
在这里我们就用“选择排序”的思路带着大家用scratch实现从小到大排序
思路是这样的:
第一轮:我们用第一个数字跟剩余的9个数比较大小,如果第一个数字比其他数字大,就交换这两个数字的位置(因为我们的排序是从小到大,就让小的数字在前面)。
具体:
1、第一个数字和第二个数字比较后,第一个数字89比第二个数字62大,就让两个数字换顺序;2、再让新的第一位置数字62和第三个数字45比较,比较之后45排到第一位置;3、新的第一位置数字45再跟第四个数字比较……以此类推,最终排在第一位置的数字是整个数组【L】中最小的数字。
程序脚本体现如下
我们新设一个变量【i】代表除了第1项以外的其他项,先将i设为2,通过让i每次增加1,实现第一个数字(L的第一项)与其他各个数字比较。
在替换之前,需要设一个变量【temp】,作为数字交换过程中一个承接数字的临时空间(我们通常称为“罐子”,交换数据的原理可以用两个杯子中的水交换来理解)。第二轮:用与第一轮同样的方法,让第二个数字40跟剩余的8个数比较大小(第一个数字一旦排好了就不需要再动),也就是让数组【L】的第2项,分别与从第3项、第4项、第5项……第10项逐一比较。
本次需要将i设为3,让第2项与从第3项开始的其余8个数比较
得到如下顺序的数组:
第三轮:用同样的方法,让第三个数字53跟剩余的7个数比较大小
第四轮:用同样的方法,让第四个数字跟剩余的6个数比较大小
……
最终得出排序结果
看到这里,您对这个排序程序的算法步骤应该是很明白了,但如果按照这样下来这个脚本也太长了(即把以上所有脚本都要拼接起来),用scratch做反而很麻烦。那么有什么办法可以简化呢?
我们看到,在每一轮的第一个数字与其他几个数字比较,可以用重复执行数字顺序i+1就可以完成。而第二轮、第三轮……第十轮都是重复与第一轮一样的方法,是不是也可以嵌套一个重复执行的顺序呢?
答案当然是可以的!
为了使我们两个数的比较更加清楚,我们可以设两个变量作为数组【L】的项目顺序,一个设为【n】,一个设为【i】,以 n 来控制轮数,以 i 来实现每一轮里已确定一个比较数后另一个比较数的变更。脚本程序可以缩减如下:
当n=1时,i=n+1=2,i重复增加1,直到执行到10
当n=2时,i=n+1=3,i重复增加1,直到执行到10当n=3时,i=n+1=4,i重复增加1,直到执行到10……直到n执行到10(全部比较完毕)
这个用scratch排列数字的程序就基本完成了!
当然还可以用“制作新的积木”的方式将交换顺序的脚本封装,这就大大简化了接着用冒泡排序、插入排序、希尔排序等等方式再来玩一遍数字排序!
制作新积木块“交换数字”
所以说,用scratch一样能玩C、C++、python中的算法!在很多竞赛中就体现了排序这种算法的题。
到这里,你可能会松了一口气,还好,这是竞赛。我们成年人做这种题可能都有点绕晕啊!那么告诉你,软件编程预备级(scratch等级考试)4级中可能就会有类似难度的题!
知识点讲完了,下面就给大家出一道scratch初级组(1-3年级)的一道编程题:
任务:小明和几名同学在周末一起参加了一场苹果采摘活动,他们每个人摘到的苹果的数量已经存到了【苹果数量】列表里面,请你编写代码自动计算出摘的最多的比摘的最少的多摘了几个,把结果保存到变量【结果】中。
举例:摘的最多的摘了30 个,最少的摘了12 个,【结果】应该为18。
转载自“启迪少儿”公众号的原创文章
原文作者:北京通州的迪迪妈
、
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com