动漫《端脑》中有这样一道题,简化描述如下:
甲乙两人各有一张写着数字的卡片,裁判告诉两人他们手上卡片数字相乘的结果不是8就是16,问如何能够在不告知数字的情况下菜刀对方卡片上的数字是多少?
我们假设甲的数字为X,乙的数字为Y,则二者的可能情况如下:
X | Y | 乘积 |
---|---|---|
1 | 8 | 8 |
1 | 16 | 16 |
2 | 4 | 8 |
2 | 8 | 16 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 1 | 8 |
8 | 2 | 16 |
16 | 1 | 16 |
甲的卡片上写着的数字是2,接下来我们看看如何知道。
一、过程详解
开始前先说明,在每次对于甲说明时,表格的顺序是X、Y、乘积;在每次对乙说明时,表格的顺序是Y、X、乘积。并且下文中红色字体的信息是双方都知道的信息。
1.第一轮
- 此时甲告诉乙:“你的数字是多少我不知道”。
这句话的信息量并不是0,而是告诉了乙X≠16。
这是因为,观察上面的表格,X只有在自己为16的时候,Y只有一个数值能使条件成立。因此如果此时说不知道,那乙知道甲肯定不是16。
- 乙告诉甲:“你的数字是多少我也不知道”
- 为了方便观察,将Y的数字连续变化排列,我们以Y的视角得到一个新的表格,去掉X=16的行:
Y | X | 乘积 |
---|---|---|
1 | 8 | 8 |
2 | 4 | 8 |
2 | 8 | 16 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 1 | 8 |
8 | 2 | 16 |
16 | 1 | 16 |
很显然,乙告诉了甲Y≠16并且Y≠1。
这是因为观察可知,Y=1和Y=16都只对应了一个X,如果是这两个数就知道X是什么了。
2.第二轮
- 甲告诉乙:“你的数字是多少我还是不知道”。
去掉X≠16、Y≠16、Y≠1的几行,我们看一下此时的全局分布情况:
X | Y | 乘积 |
---|---|---|
1 | 8 | 8 |
2 | 4 | 8 |
2 | 8 | 16 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 2 | 16 |
很显然,甲告诉了乙X≠1并且X≠8。
这是因为观察可知,X=1和X=8都只对应了一个Y。
- 乙告诉甲:“你的数字是多少我也不知道”
去掉X≠16、Y≠16、Y≠1的几行,我们看一下此时的全局分布情况:
Y | X | 乘积 |
---|---|---|
2 | 4 | 8 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 2 | 16 |
很显然,乙告诉了甲Y≠2并且Y≠8。
道理还是和之前一样。
则全局分布如下:
Y | X | 乘积 |
---|---|---|
4 | 2 | 8 |
4 | 4 | 16 |
那么此时就得到了结果,乙手上的Y是4。
可是此时问题的重点是乙还是不知道X是2还是4,这也是动漫的一个BUG。
二、甲乙数字互换
甲的卡片上写着的数字是4,乙的数字是2
1.第一轮
甲:我不知道
X | Y | 乘积 |
---|---|---|
1 | 8 | 8 |
1 | 16 | 16 |
2 | 4 | 8 |
2 | 8 | 16 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 1 | 8 |
8 | 2 | 16 |
去掉X=16(红色背景表示去掉);
乙:我不知道
Y | X | 乘积 |
---|---|---|
2 | 4 | 8 |
2 | 8 | 16 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 1 | 8 |
8 | 2 | 16 |
去掉Y=1和Y=16。
2.第二轮
甲:我不知道
X | Y | 乘积 |
---|---|---|
2 | 4 | 8 |
2 | 8 | 16 |
4 | 2 | 8 |
4 | 4 | 16 |
去掉X=1和X=8
现在的情况变成了:
Y | X | 乘积 |
---|---|---|
2 | 4 | 8 |
4 | 2 | 8 |
4 | 4 | 16 |
8 | 2 | 16 |
而乙知道自己的Y=2,因此
乙:我知道了
Y | X | 乘积 |
---|---|---|
2 | 4 | 8 |
8 | 2 | 16 |
乙知道自己是Y=2,则他就知道X=4
甲知道自己是X=4,则他就知道Y=2。
三、总结
因此对于双方一人拿2一人拿4的情况,重点就在于要想求解,必须是拿4的人先透漏信息。