分享

【不可能的谜题】- 数学智力游戏系列

 遇见数学 2020-10-31

不可能的谜题(The Impossible Puzzle)是一个数学问题, 乍看之下似乎没什么线索,无法作答,所以被称为“不可能的谜题”. 这谜题有很多个版本。这里用最原始的版本: 

教授在黑板上写下了两个正整数X和Y, 将其告诉了学生S,告诉了学生P。两人知道 1<X<Y<100,并发生了如下对话:

P:我不知道X和Y的具体值

S:我知道你不知道X和Y的具体值

P:那我现在知道了

S:那我也知道了

如果两人足够聪明,求X和Y。 

下面来来分析这个有趣的谜题, 并用选择 Wolfram 语言 求解出来: 

一、P说不知道X和Y的具体值

那么,那些情况下他能确定 X 和 Y 的值呢?当 P 得到的数的乘法分解唯一的时候。如15=3*5,16=2*8,而当他知道的数为诸如20的时候就不能确定了(20=2*10=4*5)。那我们做的第一步就是可以缩小数对的范围。

首先产生所有的 x、y 数对,用 Wolfram 语言来实现就是下面代码, 如果你对 Wolfram 语言还比较默认, 可以跳到解题的下一个步骤. 由于Table 多参数产生的列表是多层的,所以需要压平一层。

初学者看不懂Wolfram 语言中这些##&@@@#&不要紧,把它当成Flatten[#,1]& 就好了,两者在大多数情况下可以互换。此处采用这个写法是为了少打 5 个字符以节约大量时间。

p1 则是 P 第一次对话后剩余的可能的 x、y 数对。先用 GatherBy 按积相等进行分组,用 Select 挑选分组的长度不少于 2,即分解不唯一的数对。

二、S说我知道你不知道X和Y的具体值

S 只知道 x、y 的和,为什么却能知道 P 不能确定答案呢?无论 S 得到的数如何加法分解,每一对和分解的乘积的乘法分解不唯一,就能得出这样的结论。比如S得到了11,

11=2+9=3+8=4+7=5+6,

2*9=3*6,

3*8=4*6,

4*7=2*11,

5*6=3*10。

由于 S 足够聪明,他知道 P 的推理过程,自然能得出上面的 p1 表。换句话说,S 做出题设的结论,如果 S 得到的数的的加法分解数对全在 p1 表中的时候。于是可再次缩小数对范围。

下面是代码求解:

先对 p1 压平,按和相等进行分组,用 Select 挑选每组长度为所有分解长度的数组。可见此时 S 的值已锁定在 10 个值之内。

三、P说已经知道了答案

P 说已经知道了答案,那他是如何做到的呢?P 足够聪明,他知道 S 的推理过程,也就知道了 s1 的数对集合。说明在自己知道的数的乘法分解中,仅有一个数对在 s1 表中。据此可以再次缩小数对的范围。

先对s1进行压平,按积相等进行分组,用Select挑选每组长度为1的数组。

四、S说他也知道了答案

S 足够聪明,也得出了 p2 的数对集合,而且自己得到的数的加法分解中仅有一个数对在 p2 表中。让我们再来试试。

先对 p2 进行压平,按和相等进行分组,用Select挑选每组长度为1的数组。

可见此数对唯一,答案已然揭晓。

这道不可能的谜题最早是由汉斯·弗赖登塔尔得在 1969 年发表,而“不可能的谜题”这个名字是由马丁·加德纳所提出的, 加德纳可是 20 世纪下半叶, 美国数学科普界叱咤风云的人物, 除了他之外还有两位大师级的人物:艾萨克·阿西莫夫卡尔·萨根

这些大师均已逝世, 未来我们会用一系列这些文章来纪念他们. 下面看来加德纳老先生著名的"水手分椰子"趣题: 

5个水手带着1只猴子来到一座荒岛,见岛上有大量椰子,他们便把这些椰子平均分成5堆。夜籁人静,一个水手偷偷起来拿走了一堆椰子,把剩下的椰子又平均分成5堆,结果多出一只椰子丢给猴子吃掉了,过了一会儿,另一个水手也偷偷起来,拿走了一堆椰子后,再把剩下的椰子平均分成5堆,结果还是多了一只,丢给猴子吃了。就这样一个多事的夜晚,5个水手都偷偷藏起一堆,重分了椰子,每次都多出一只椰子让猴子占了便宜。第二天一早,岛上依然平均堆放着5堆椰子。试问:原先的椰子最少要有多少只?

这道趣题解法很多, 您想尝试下吗? 有兴趣的请将答案发至 meemath@foxmail.com, 我将在下一期数学智力游戏文章中将解答方法公布. 

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多