2023/6/2614 浏览
看下这张图——
[图片]
当20个小人,同时拿起数据方块时,我们能看到每个人头顶的数字🔢都不一样。
那么,该如何下达指令,让小人们自动对数字进行排序,让数字从左到右、从小到大排序呢?
[图片]
非常简单,我们给出三行命令就能解决——
[图片]
如果,小人们手上拿的数字,小于(<),左边的人;
则,往左走,与左边的小人互换位置;
接着重复判断命令,如果左边数字依旧比自己小的话就继续换位置,否则停下。
很简单吧?来执行一下看看。
[图片]
诶?情况不对。
按理说左边数字大的小人,应该跟右边数字小的小人交换位置,但左边小人挡住了不动。
所以我们需要再加两行命令——
[图片]
如果小人手中的方块大于右边的,则往右走一步。接着跳转循环重复判断。再来试一下。
一切就都合理了。舒服!
[图片]
看完上面例子你已经懂这游戏了吧?那我们稍微再加点难度?
这次给你一地的数据方块,但你只有6个小人(坐在桌子旁的那是资本家,不参与下场打工)。
你该如何在最短时间内,指挥小人把满地所有数据方块🔢,丢到右下角粉碎机中销毁呢?
[图片]
游戏给了一点提示,你可以下达“最接近的”指令,并将其写进记忆体中。
有了默认的这些提示,当你运行程序后,小人们就会自动跑到距离自己最近的数据方块那里并拿起。只是现在他们拿起后只会站着不动,还需要你下达后续指令。
[图片]
这很简单啊!我们再写个记忆体2,是最接近的粉碎机,不用特意指出粉碎机在哪,让小人自己去寻找。
然后加一行命令,让小人拿起记忆体1,去交给记忆体2,然后重复跳转执行,把剩下所有数据方块都放粉碎机里。
[图片]
我们尝试运行一下。
[图片]
啊?小人怎么自己也跳粉碎机了?上个班而已,没必要寻短见吧?人都寄了满地数据方块谁给我打工?
一定是指令代码出了问题。记忆体1(最接近的方块)被扔进粉碎机后就不存在了,所以前一个记忆体1被粉碎后,我们要重新生成一个记忆体1。
[图片]
因此,我们不修改代码内容,只是将记忆体1下拉拖进循环。
再来执行浅浅一下——
果然OK了。小人排着队销毁方块,直到地上所有方块全被销毁才终止。
TapTap