发表在 IT女(Java部落) 08-15 09:48:32
欢迎看到我的scratch自动算24点第五集更新!!!
这期比较难,我准备精讲。
这期讲的是结果合成,也就是把所有的运算结果都输入进链表“ok”里。
这个很简单,是吗?
其实不是。我可以说,这是5期以来最难的一章!
好了,废话不多说,开始吧!!!
首先,我们先试着输入一个2个数的计算结果,并将它加入链表中。
这个其实很简单,只要运用我上次运算模块,分分钟做出来。
比如说我们就做一个“2+3”模块,看看链表中会不会出现5。
那么,我们将如何做这个呢?
如果你看了我的上期帖子,你就会知道我已经帮你做好了计算模块,看看:(刊物说明:把第3个的变成1 + 2)
我们只要在“更多模块”中拖拽这条指令,就可以用了。
可以参照这个模块的定义,来输入值。
第一个数是3,那么就输入3,第2个数是2,那么就输入2。最后一个是运算符号+,看一眼定义,对应的是1。于是就输入1。
最后,由于输出结果是保存在变量“do”里的,那么就后面再加个“将do加入链表ok末尾”。
试验成功!
这下,来做一个3个数的运算:
(1+7)×3
来,试试看!
所谓三个数,必须是满足四则运算的。一定有一个先算,一个后算。
如果我们把上面那条算式写成递等式会怎么样?(也许你可以从中掌握如何去编程这个算式)
(1+7)×3
=8×3
=24
由此可见,我们是先把两个数当成两数算式,然后再把结果与第3个数做运算,那么,就应该是这样的:
你不用知道结果多少了,我看好了是24。
好了,我们已经完成了这期的第一步。
先提前说一下,我们今天做的依然是定义模块。
因为运算时的数字已经是给定了的,他们分别被保存在变量“1”“2”“3”。这个1、2集说过。
既然是给定了的,那么我们可以给这个新定义模块添加3个数字参数,他们就是“1”、“2”、“3”。
可能很多人会问:既然是一定的变量不应该是不被设为数字参数了吗,这下怎么反过来了!
等一会你就知道了,我们暂且就照我这么办。
我们知道,我们这次的目的是把3个数中所有的运算方式都放进链表“ok”里面。
所以,我们可以新建一个变量“i”来代表各种运算符号所对应的数字。
我们上次说了,其实是6种运算,所以我们可以重复执行6次,每次都将i增加1。
明白了吗?
可能你还不太明白,不过我们可以用举例子来说明一切。
我们来试试看:给你2个数:4和6,把关于这2个数的所有运算方式的结果放在“ok”链表中。
这个相对于上面2个,可能会比较难,甚至有人用笨方法直接18个定义弄上去。
这个绝对是不行的,我们来分析一下到底怎么做吧!!
这……好吧,表示真的有人用笨方法↑,这是绝对不可取的!
3数模式24点一共有108个组合,你认为你想这样吗!!!!
我们不妨来观察一下这个笨方法:你会发现,只有一个是变动的,那就是运算符号。
不管怎么样,是不是有一种想要重复执行6次的冲动啊!!!
这是有问题的,因为你的运算符号一直是1。
那怎么样既能有重复执行,又能有运算符号的变化呢?
看看上一个笨方法,我们会发现运算符号123456一直在加1,而碰巧变量中有一个“增加”,我们就可以用上了。
设定一个变量i,然后让他每次+1就行啦!是不是听我这么一说,就简单一点了呢?
不过,千万别忘了do、i的初始化哟!
如果这张图能理解的话:恭喜你,你离本季的成功又近了一步!
接下来,我们要用2、3、4。3个数,把3个数的所有运算结果都放进链表“ok”里面。
这个,就是我们本集的最终目标了。
首先,2、3、4三个数的排列方式就有3种。(123)(132)(231),。
有人要问:不是有6种组合吗你“321”、“213”“312”都没算呢。
其实,321和231是一样的,都是先算23,后算1.
213和123是一样的,都是先算12,后算3.
312和132是一样的,都是先算13,后算2.
既然数字有3种组合,第一个运算符号有6种,第二个运算符号也有6种,一共108种!
根据刚才的方法,我们利用“i”变量来做了一个这样的脚本
我们会发现,又多了一个“i2”变量,那么他怎么办呢?
我们有一种数组合的方法,每当i增加6遍,i2增加1遍,然后i又变成0。我们把上面看成一个整体,再次嵌套在i2的增加。
那么,应该是这样的:
到这里,所有运算符号的组合就完成了,但我们还得考虑数字组合!!
为了缩短脚本长度,我们把上面那个看成一个定义,3个数字参数就是我们要的数字。
怎么样,不错吧!
那么最后,我们只要考虑一下数字顺序的组合了!!
那么,我们如何把这个模块运用到变量“1”“2”“3”呢?
比你想的简单得多!
在此,我们的任务完成啦!!!!!!!!!!!!!!!!!
如果觉得还是看不大懂,可以多看几遍,一定有所收获。
不错不错~给你个议员