这个scratch题目应该这样做吗?

  • c
    chingjx
    27.小红在列表里面存了一些数据,但是发现顺序是错的,经过比对,只需要将列表中的每项数据向前移几位就是正确的顺序,首尾是相连的,如果第一项前移1位,那么就移动到了末位。
    比如列表中的数据为1,2,3,4,5,每项数据向前移1位,那么移动后列表中的数据就变为2,3,4,5,1。
    (1)准备工作
    在预留文件中的小红角色中编程。
    列表【list】已预留,可以直接使用。
    (2)功能实现
    1)代码运行后,程序会询问需要前移的次数。
    2)根据输入的数字,让列表中的数据前移指定的次数。



    这是四级水平,我觉得小朋友怎么会想得到?我这个才是最科学的,我看了网上的答案,感觉不科学。

    说下我的思路:给定一个列表,中间有N个数,我设置一个临时数表,把给定的数表填充两次(也就是2N长),因为按这个题目,向前移动的位数是可能大于N的,所以我用的N/移动的次数取余,这个余数才是实际移动次数(肯定小于N啦)。


    红色的字是关键,小朋友这个他能想得到?我不信。

    这是我做的(运行测试后,是完美无瑕的):





    网上答案是这样的,感觉这答案瞎扯淡:
  • 痴汉
    网上的看着比你的短
    都能正常运行出正确答案的话网上的强没毛病iOS fly ~
  • l
    lanwater
    为啥要取余啊?这个概念当然小朋友没学过, iOS fly ~
  • n
    nankeys
    网上的答案是对的。因为这是个实际情况,小红绝对不会把移动x位认为是移动x+n位,所以x一定是小于n的。网上的答案是每次往前移动1位,重复x次,这是最自然的想法,虽然效率不高,但是没有问题啊。
  • 9
    94crazy
    一般都是移动表头指针 实际中哪有真移动数据的 ld/st性能开销太大了 另外回答一下三楼 有的本科生到毕业都用不熟取余 但是取余是计算机很常用的操作 从开始接触就要学习 会除法就能懂 没啥难的
  • d
    drwxrwx
    Scratch脱胎于logo,适合函数式编程。这题除了像网上的答案那样显式控制循环还可以使用递归。先定义移动列表一位的函数,将移动次数-1递归代入。根据经验移动次数太多scratch会受不了,毕竟只是个玩具。
    楼主的思路够直白,但好像在控制一些不必去控制的细节,所以行数比网上的答案长。