当前位置: 我的世界 > 游戏攻略 > 正文

我的世界一条命令实现辗转相除的方法教程

小编:3F时间:2016-05-31 13:52回到游戏园首页

  我的世界一条命令实现辗转相除的方法教程。那下面给大家分享的是一个一条命令方块的教程哦~那到底是什么指令这么有魅力呢?那下面就一起来看看吧!希望大家喜欢。

  游戏园我的世界官方群:325049520(已满) 二群:256070479 欢迎各路喜爱我的世界的小伙伴们加入讨论!

  玩服务器的小伙伴们可以加入:141931866 群一起联机玩游戏哦!

  如果你是腐竹的话可以给我们投稿你的服务器哦~投稿地址点我进入

  如果你有心仪的作品或者心得分享的话,欢迎来游戏园投稿,大家可以点击>>>投稿<<<进行投稿哦~ 有奖品哦~

我的世界一条命令实现辗转相除的方法教程

  辗转相除,又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公约数的算法。

  注意,这里的一条命令是真的一条命令不是OOC啊!

  辗转相除法就是透过两个数互相取余,当其中一个变为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] ~ ~ ~

  可能看起来很白痴吧,加上几个没什么用的命令。其实不然,这四个命令就是检测两个实体是否分数都大于0(先指定选择该实体,然后检查分数),不符合的话自动就会跳过此次执行。

  在实际执行上看来,分数运算需要的时间是大于选择实体的,所以这个命令是能够进行小幅度的优化的

  这就是成品:

  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

  PS:在此非常感谢我的世界玩家pca006132的分享。

  以上就是我的世界一条命令实现辗转相除的方法教程。更多精彩尽在游戏园我的世界专区。

  相关攻略推荐:

  我的世界手机版0.15更新命令方块 0.15到底更新了什么

  原版1.9娱乐设施一键命令方块指令教程

  我的世界OOC命令方块教程 如何检测攻击生物

  16w21a结构方块与命令方块制作的游戏内直播器

分享到:更多

游戏信息

我的世界
我的世界类型:休闲娱乐平台:PC,iOS,安卓电脑版下载
  • 游戏大礼包
  • 手游开测表