, {) z5 L6 {0 B. _2 w6 M! f
" T% J7 U, a3 J7 s: H 3 E$ \$ O( c7 _+ g0 j+ h* [# z
$ ?/ \' Y* h& J) N* v# Y
; j7 j1 {0 B$ z6 \' r$ M6 ` i% d6 V* E6 h
破箱人中的这个迷题颇为有趣,如果我们换个角度来思考,把进入迷题时各灯泡的状态看作一幅图画,而把电源接通后各灯泡的状态也看作一幅图画的话,那么这道迷题也可以当作是一幅“拼图”类型迷题吧~不过这个“拼图”却不是靠“移动”各部分来“拼”成的,而是依靠“旋转”各部分来“拼”成的。
! j: K& H( Z* }+ h* T. f2 w; o 如果各行列的旋转按钮不像现在一般有个指针的话,即使我们能够看到这个拼图的最终状态,我们有把握把它拼好么?恐怕不是每个人都有肯定的回答。
3 c6 m4 S! Z! P8 ^7 ^/ Y4 w) y这个迷题的变化真的如此复杂吗?事实上这却是一个最最简单的拼图迷题,为什么?请看下面的分析。
# a8 I5 ]3 { C& `0 M3 O9 X 这类迷题和其他拼图迷题的产生方法是一样的,都是在整齐拼图的基础上,由迷题作者通过使用和游戏者一样的操作方式随意变动而产生的。那么先让我们看看迷题作者对这幅拼图的变动产生了什么效果。
: y$ g2 b0 b4 |
r2 F8 S$ j1 X3 t# F: [; N
+ U1 M1 M: N' G& b1 K6 e ]( \* H9 [3 ?7 f; ]! o+ ~1 P( u
迷题作者通过点击每一行或列上的旋钮来旋转该行或列的全部方格,因此我们可以用上表来表示全部方格的变化情况。假设全部方格的初始状态为0(即没有经过旋转),然后方格每被旋转一次,它的状态数值就增加1,最后表上的数字就能很清楚的显示出迷题作者对拼图做过什么手脚了。
7 @# V1 c X' Q5 g% G9 B( c' P4 D$ i9 X+ ~
9 I' {# g7 t2 L
2 j; Z" F6 t/ K* ~4 W( M
例如作者对A列做了两次旋转,对5行做了一次旋转,表格的表示就如上图所示,可以看到行列相交的方格A5因参与了两次调整,故已经旋转3次了。 ) F# a; {4 Q8 M6 R
于是,作者就开始对这个表格(也就是迷题本身)做随意的调整了:
0 Q3 b* O7 G5 X' ?# |. @
+ H* o7 e! t% `! F- [0 u
& A( b! v9 w8 @. F/ K- d. O1 }5 e$ w2 v: b1 e7 Q% [
呵呵~现在简直就是一团糟嘛,作者的任务就完成了,游戏上市,摆在我们面前的就是这“一团糟”的东西,怎么办? 6 Q3 Q+ x3 W* Q/ s; h; h8 f: [
看着上面这些毫无规律的数字当然头痛,但应该记住,上面的数值只表示每个格子经过了几次旋转,但并不代表格子的状态。实际上因为是正方型的格子,所以格子的状态只有4种而已。因此我们可以先通过一些转换,把表示旋转次数的数字变为表示状态的数字,方法是把上图数字对4取模(即与4相除取其余数),于是得出: 2 S0 K9 |; W0 a4 f5 v
2 X" Z, ~, O! j* i- i 2 s9 k- U" N( K6 @
B* H% \7 ]% i$ c# N$ e! G 现在的画面好看很多了,每个数字1、2、3、0分别代表该方格处于的不同状态,很显然,我们需要做的就是让全部数字归0,这样就能把拼图复原成初始状态了。所谓“归0”,就是继续旋转数字为“1、2、3”的格子,使其累加转动次数变成4(记住:状态4=状态0)。
; H: e- n6 c( Q) B! J5 B4 i; E, ?% H9 ^) d% d \9 l
这里介绍一种极其简便的“归0”方法:选定任一行或任一列为目标,先把它全部归零,然后再调节其他的列或行,这样每行/列的旋转次数都不需要超过3次就可以解决问题了。还是以上图为例,假设我们选择先调整E列: 3 L! f7 P7 u. D8 ]2 c& G5 V
; i$ N% J" |. H. Z" P
; q, ^3 ` c3 h) Y' K! L# d/ x; m
我们通过点击按钮1两次,使行1的全部方格转动两次,E1的状态即由2转为0(4)了。同理我们通过按动按钮2~8,把E列的全部方格“归0”, ' Y( R' V4 ]5 q6 D" q3 `; l
, g, l6 V! o3 \0 Q" ^ ' x5 ]2 K/ w9 Q/ K
8 S; {2 s# C8 V7 u' J$ h$ @ 看到了,结果很神奇对不对?尽管我们只把注意力放在E列上,可是当把E列全部“归0”后,其他列上的方格居然也自动排列得整整齐齐了。
5 x& \, u% \( h) N# r 剩下的工作就是通过A~H几个按钮,把不为0的列转过来就好了。
1 y" d0 Y8 Y0 Z' g5 o6 e7 t/ P* \) r( `7 i
上面的方法可不是碰巧的呀,如果有朋友表示怀疑,说我们是碰运气,那请继续看下面的证明。 * \6 x/ ? D2 u" p& k1 _# v
0 S0 R$ g* G( t, f
3 A% P, K! f9 \/ m6 j& e(附上一个excel小程序,各位可用来测试本文内容) |