点灯解密,数学通解
03/21218 浏览攻略
之前的文章是工具解和技巧解,本篇用数学方法通杀所有点灯问题。
注:由于字数限制,仅以简单三灯为例,理论为主,实战放到下篇。
-
一、原理
1. 最简操作每个灯最多操作一下,因为两下会还原。
2. 点灯结果与点灯顺序无关。
3. 灯由灭变亮,或由亮变灭,均称为反相。
4. 操作一盏灯会使同行同列的反相。
5. 反相次数为奇数时,灯亮;反之,灯灭。
6. 当每盏灯反相次数都为奇数时,全部灯亮。
7. 从左到右,从上到下的顺序给每盏灯标号。即1行1列为灯1,1行2列为灯2,2行1列为灯3。
-
二、方程组
设灯1操作次数为x₁,依次类推。
灯1的反相受同行同列灯的影响,即灯1反相次数=灯1操作次数+灯2操作次数+灯3操作次数。要让灯1亮,则这个等式应为奇数,即:
x₁+x₂+x₃ = 奇
同理,灯2只受灯1和灯2的影响,有方程:
x₁+x₂ = 奇
同理,灯3反相方程:
x₁ +x₃ = 奇
-
三、矩阵
方程组写法太复杂,所有方程都有相同的地方,将相同的地方隐去,得到矩阵:
[111奇
110奇
101奇]
为了好看,最后一列用1表示奇,0表示偶:
[1111
1101
1011]
注意:以上并非矩阵的标准写法,只是为了简便。
-
四、计算方法理解
1. 理解 x₁+x₁=2x₁=0:x₁表示灯1操作次数,所以2x₁表示2倍的灯1操作次数,这个次数偶数,相当于没有操作,也就相当于操作次数为0。
2. 理解最后一列1+1=2=0:这个1表示奇数,2倍的奇数就是偶数,用0表示。
-
五、简化矩阵
1. 让矩阵1行1列为1,1列其它行都为0。
先让2行1列为0:第2行+第1行=1101+1111=0010,
可以直接在矩阵上计算,即第2行变为 0010,矩阵变为:
[1111
0010
1011]
同理,再让3行1列为0:
第3行+第1行=1011+1111=0100
[1111
0010
0100]
2. 让矩阵2行2列为1,其它2列都为0。
交换2行和3行:
[1111
0100
0010]
第1行+第2行=1111+0100=1011,矩阵为
[1011
0100
0010]
3. 让矩阵3行3列为1,其它3列都为0。
第1行+第3行=1011+0010=1001,矩阵:
[1001
0100
0010]
-
六、分析矩阵
1. 第3行,0010表示灯3次数为偶数,即灯3不操作。
2. 第2行,0100表示灯2次数为偶数,即灯2不操作。
3. 第1行,1001表示灯1次数为奇数,即灯1操作。
即,只需要看最后一列为1的有哪些行就操作哪些灯。
-
需要注意,有时会出现一行和一列全0的情况,表示这个灯可操作,可不操作,直接假定不操作即可;如第3列全0,则假定0010替换全0的行。
-
总结:其实很简单,只是为了把原理讲清楚,所以写了这么多。实际操作时,只需要把矩阵列出来,化简,看哪些行最后为1即可。
-
你学会(废)了吗?
-