打乱魔方软件_魔方打乱程序思路

.

1

/

2

魔方打乱程序思路

2010

之前在网上下载了一个魔方打乱程序手机版

(

WM

平台)

程序中的打乱可以说是糟透

了,

RLR

’这样的出现很多,但最让人郁闷的不是

RLR

,而是居然还让我见到了

DD

’这

样的公式,

真是有够开玩笑的,

所以想到了写这篇文章,

我不是专业的程序员,也就不写什

么例程之类的了,只写写我想到的方法。

首先我把魔方打乱公式中的转动方法分为

18

种,按照

U

U2

U

D

D2

D

F

F2

F

B

B2

B

R

R2

R

L

L2

L

’这样的顺序来把这

18

个转动方式编号为

1-18

(顺序一写要是正对的两个面是连在一起的)

,再准备三个整数变量

I1

I2

I3

然后在出打乱公式第一步的时候生成一个

1

18

之间的随机数并把这个随机数保存到

I2

中。

接下来出打乱公式的第二步,生成随机数(一样是

1

18

之间的,后面没特别说明的就是

1

18

之间的)

,并把第二步生成的这个随机数保存到

I1

中,这时要做一次检查,以防止

出现

UU

’或者

RR2

这样的公式出现,这里我的检查方法很简单,直接检查

(I1-1)/3

的整数

部分是否等于

(I2-1)/3

的整数部分,例如第一步是

U

,第二步是

U

,那么现在

I2

的值是

1

I1

的值是

3

,放进我前面说的两个公式里就是

(3-1)/3=0.666

…和

(1-1)/3=0

,它们的整数部分

相等,

检查结果就证明了第二步如果是我刚才的例子则是废步,

那么就重新生成一个随机数

并保存到

I1

中去吧(条件循环)

;再举个例子,第一步是

R2

,第二步是

L

,对照我的

18

个编号可以看到

R2

14

L

18

,那么两个公式就是

(18-1)/3=5.666

…和

(14-1)/3=4.333

…,

此时两个结果的整数部分不相等,这个情况下就说明

R2L

’不是废步。

接下来就说说第三步吧,第三步开始时先把

I2

的值保存到

I3

中去,然后

I1

的值保存到

I2

中去,

比如刚才前面所说的

I2

14

I1

18

那么经过我现在所写的之后,

就应该变为

I3=14

I2=18

了,

然后再次生成随机数,

并把这个新的随机数保存到

I1

里,

进行一次刚才第二步时

一样的检查,也就是看

(I1-1)/3

(I2-1)/3

的整数部分,这里就不废话了,接下来检查第三步

会不会造成和第一步产生废步,

也就是说不可以有

RLR

或者

F2BF

这样的公式出现,

检查

方法也很简单,先看

(I1-1)/6

(I2-1)/6

的整数部分是否相等,如果不相等则第三步没有和第

一步产生废步,后面的步骤可以跳过了(原理很简单,稍微想想就知道了)

;但是如果先看

(I1-1)/6

(I2-1)/6

的整数部分相等的话,

那么就还要再检查一次了,

这次要检查的是

(I1-1)/3

(I3-1)/3

的整数部分,如果相等则说明产生废步了,不等则不是废步。就拿刚才的第一步

14(R2)

,第二步是

(L

)

来说吧,第三步如果是

L

L2

L

’这三个的其中之一,那么在

第一次检查(除以

3

的)时就不通过了(请自己将

18

个编号套用公式算一下,后面都不写

出公式的计算过程了)

;那么第三步如果是

R

R2

R

’这三个其中之一的话,那么第三步

第一次检查则通过,于是进入第三步的第二次检查(除以

6

的)

,这里由于前面一步是属于

L

转的三个状态之一,所以要进入第三步的第三次检查(也是除以

3

的,不过

I2

换成了

I3

)

了,这时就会发现第三步和第一步出现废步,重新生成随机数给

I1

吧(条件循环)

现在生成第四步,再往后面和第四步是一样的,就不用写了。首先是把

I3

里保存的数字输

出成文字,

也就是

I3

1

则输出

U

2

则输出

U2

等,

接下来就是完全和第三步一样了,

没什么好写的了,

然后是就最后一步了,

当生成到了最后一步时,

检查完了

I1

不是废步就直接把

I2

I1

里保

存的数字输出成文字,至此整个没有明显废步打乱公式就生成成功了,我想写的也写完了,

呵呵。

PS

:对于

18

种转动在大部分编程语言里应该是可以写成一个文本数组吧?

最后附上我用上面所说的方法生成的

100

步公式吧,看看上面写的方法是否正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值