注意,这里的一条命令是真的一条命令不是OOC啊!
各位好,又是我pca怪蜀黍,今天又来向大家宣传丧病的execute神教啦~
辗转相除法就是透过两个数互相取余,当其中一个变为0的时候,另外一个数字就是两个数字之间的最大公因数了举个例子,a=120和b=50
a=a%b=120%50 = 20
b=b%a=50%20 = 10
a=a%b=20%10 = 0
所以他们两个之间的最大公因数就是10
由此我们可以推断出一个很简单的算法:
复制代码
当然,这个并不是任何编程语言啦~ 只是为了理清我们的逻辑
好了,问题来了,我们要如何做到while呢?
这里我们用了一个取巧的方法,也就是接近穷举的方法: 一大堆execute @e[tag=xxx]
这里要先说明一下,tag=xxx的只能有两个,而且要是拥有该两个分数的实体,这是为了在一条命令里能做到两个轮流执行才做出的调整
有什么用途呢?比如说你有2个实体,一个execute @e就是2次,两个就是2^2=4次,三个就是2^3=8次,如此类推
很快就能做到大量的执行次数
当然,为了能够避免大量无用的执行,我们也需要加上限制,就是只选择分数>=1的实体执行,这样子就可以省略大量的运算了
然后,相除的地方就是
复制代码了
比如说现在执行的是a,c=1选择到的自然是a,至于tag=xxx,c=-1选择到的就一定是b了,反之亦然
很简单对吧!然而这样子优化还是不足,我们需要多几个命令来进行优化
复制代码可能看起来很白痴吧,加上几个没什么用的命令。其实不然,这四个命令就是检测两个实体是否分数都大于0(先指定选择该实体,然后检查分数),不符合的话自动就会跳过此次执行。
在实际执行上看来,分数运算需要的时间是大于选择实体的,所以这个命令是能够进行小幅度的优化的
这就是成品:
复制代码
来自群组: Command Block Logic
各位好,又是我pca怪蜀黍,今天又来向大家宣传丧病的execute神教啦~
辗转相除法就是透过两个数互相取余,当其中一个变为0的时候,另外一个数字就是两个数字之间的最大公因数了举个例子,a=120和b=50
a=a%b=120%50 = 20
b=b%a=50%20 = 10
a=a%b=20%10 = 0
所以他们两个之间的最大公因数就是10
由此我们可以推断出一个很简单的算法:
- while a和b都不是0:
- if 上次是a%=b:
- b %= a
- else:
- a %= b
当然,这个并不是任何编程语言啦~ 只是为了理清我们的逻辑
好了,问题来了,我们要如何做到while呢?
这里我们用了一个取巧的方法,也就是接近穷举的方法: 一大堆execute @e[tag=xxx]
这里要先说明一下,tag=xxx的只能有两个,而且要是拥有该两个分数的实体,这是为了在一条命令里能做到两个轮流执行才做出的调整
有什么用途呢?比如说你有2个实体,一个execute @e就是2次,两个就是2^2=4次,三个就是2^3=8次,如此类推
很快就能做到大量的执行次数
当然,为了能够避免大量无用的执行,我们也需要加上限制,就是只选择分数>=1的实体执行,这样子就可以省略大量的运算了
然后,相除的地方就是
- scoreboard players operation @e[tag=xxx,c=1] scb %= @e[tag=xxx,c=-1] scb
比如说现在执行的是a,c=1选择到的自然是a,至于tag=xxx,c=-1选择到的就一定是b了,反之亦然
很简单对吧!然而这样子优化还是不足,我们需要多几个命令来进行优化
- execute @e[tag=xxx,r=0,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,c=-1] ~ ~ ~ execute @e[r=0,score_scb_min=1,tag=xxx] ~ ~ ~
在实际执行上看来,分数运算需要的时间是大于选择实体的,所以这个命令是能够进行小幅度的优化的
这就是成品:
- execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,r=0,score_scb_min=1] ~ ~ ~ execute @e[tag=xxx,c=-1] ~ ~ ~ execute @e[r=0,score_scb_min=1,tag=xxx] ~ ~ ~ scoreboard players operation @e[tag=xxx,c=1] scb %= @e[tag=xxx,c=-1] scb
来自群组: Command Block Logic
看标题推出lz高一.
LZ高一
一楼高中
肯定没错
辗转相除是公元前300年的方法了....
真没卵用...
一楼高中
肯定没错
辗转相除是公元前300年的方法了....
真没卵用...
你在说什么,我根本看不懂怎么办
还有至于写while和if么……万一有人看不懂怎么办
还有至于写while和if么……万一有人看不懂怎么办
至于写while if么{:10_493:}没看文字的时候差点以为是java代码{:10_495:}
最近在学javaHHHH
楼上的pcb语言都不懂(手动滑稽)
不管看不看的懂 先交膝盖再说
不管看不看的懂 先交膝盖再说
cheng000 发表于 2016-5-30 03:17
看标题推出lz高一.
额辗转相除我四年级就会了
Ttttt... 发表于 2016-9-3 16:14
额辗转相除我四年级就会了
哇塞,兄弟好厉害, 让在下这个渣渣去死吧~haha{:10_494:}
神?Execute嵌套
E100撞老鼠 发表于 2016-5-30 23:23
LZ高一
一楼高中
肯定没错
更相减损?不是更老吗,分解质因数还是需要穷据质数的……