趣题:无限多层嵌套的逻辑推理

大家一定见过很多“我不知道,我也不知道,我还是不知道,我还是不知道,我知道了,我也知道了”的问题。但是,我想大家一定没有见过下面这样的问题。

A 、 B 两人在主持人 C 的带领下玩一个游戏。 C 向两人宣布游戏规则:“一会儿我会随机产生两个不同的形如 n – 1/2k – 1/2k+r 的数,其中 n 、 k 是正整数, r 是非负整数。然后,我会把这两个数分别交给你们。你们每个人都只知道自己手中的数是多少,但不知道对方手中的数是多少。你们需要猜测,谁手中的数更大一些。”这里,我们假设所有人的逻辑推理能力都是无限强的,并且这一点本身也成为了共识。 C 按照规则随机产生了两个数,把它们交给了 A 和 B ,然后问他们是否知道谁手中的数更大。于是有了这样的一段对话。 Read more…

趣题:证明所有乘积的总和与分拆的方式无关

    有 1000 枚硬币堆在一起。把它们任意分成两堆,并计算出这两堆的硬币数的乘积。然后,任意选择其中的一堆硬币,把它继续分成两个更小的堆,并计算出这两堆的硬币数的乘积。不断这样做下去,直到最后每堆都只剩一枚硬币为止。求证:把途中产生的所有乘积全部加在一起,结果是一个定值,它不随分法的改变而改变。

Read more…

对角线方法之后的故事

    同样是无穷集合,如果集合里的元素能够与全体正整数构成一一对应的关系,我们就说它是可数的,否则就说它是不可数的。 1874 年, Cantor 发表了一篇重要的论文,论文中证明了全体有理数甚至是全体代数数都是可数的,但全体实数却是不可数的。换句话说,同样是无穷多,实数的数量比有理数、代数数的数量都高出了一个级别。不过,当时 Cantor 证明实数集不可数的方法并不容易理解。 1891 年, Cantor 发表了另一篇论文,给出了实数集不可数的另一种证明方法。此后,这个简单到不可思议的证明不断地震撼着每一个初学集合论的人:

    事实上,实数区间 (0, 1) 就已经是一个不可数的集合了。换句话说,你绝不可能用“第一个数是某某某,第二个数是某某某”的方式把 0 到 1 之间的所有实数一个不漏地列举出来。我们大致的证明思路是,假设你把实数区间 (0, 1) 里的所有数按照某种顺序排列起来,那么我总能找到至少一个 0 到 1 之间的实数,它不在你的列表里,从而说明你的列表并不全。把你的列表上的数全写成 0 到 1 之间的无限小数(如果是有限小数,可以在其后面添加数字 0 ,把它变成无限小数):

a1 = 0.0147574628…
a2 = 0.3721111111…
a3 = 0.2323232323…
a4 = 0.0004838211…
a5 = 0.0516000000…
………

    那么我就构造这么一个小数,小数点后第一位不等于 a1 的第一位,小数点后第二位不等于 a2 的第二位,总之小数点后第 i 位不等于 ai 的第 i 位。这个数属于实数区间 (0, 1) ,但它显然不在你的列表里,因为它和你列表里的每一个数都有至少一位是不同的。这样,我们就证明了实数区间是不可数的。

Read more…

经典证明:能否在平面上写下不可数个不相交的Y?

    这篇文章收录了 Which Way Did the Bicycle Go 趣题集中一个非常有趣的问题:是否有可能在平面上画不可数个不相交的 8 ?答案是否定的。证明方法非常简单。对于任意一个 8 字形,在两个洞里各取一个有理点 P 、 Q (由于平面上的有理点是稠密的,这是总能办到的),则称这个 8 字形圈住了有理点对 (P, Q) 。注意到由于 8 字形不能相交,因此两个 8 字形不可能圈住同一对有理点。由于平面上的有理点对是可数的,因此 8 字形的数量也是可数的。

      

    注意到,平面上显然能够容下不可数个不相交的直线段,也显然能够容下不可数个不相交的圆(比方说一系列同心圆)。在 Mathematical Puzzles 一书里, Peter Winkler 提出了这样一个问题:我们能在平面上写下不可数个不相交的字母 Y 吗?

      

Read more…

八皇后问题算什么,来看看无穷皇后问题吧

    当 1848 年国际象棋玩家 Max Bezzel 提出八皇后问题(eight queens puzzle)时,他恐怕怎么也想不到,100 多年以后,这个问题竟然成为了编程学习中最重要的必修课之一。八皇后问题听上去非常简单:把八个皇后放在国际象棋棋盘上,使得这八个皇后互相之间不攻击(国际象棋棋盘是一个 8×8 的方阵,皇后则可以朝横竖斜八个方向中的任意一个方向走任意多步)。虽然这个问题一共有 92 个解,但要想徒手找出一个解来也并不容易。下图就是其中一个解:

     

    八皇后问题有很多变种,不过再怎么也不会比下面这个变种版本更帅:请你设计一种方案,在一个无穷大的棋盘的每一行每一列里都放置一个皇后,使得所有皇后互相之间都不攻击。具体地说,假设这个棋盘的左下角在原点处,从下到上有无穷多行,从左到右有无穷多列,你需要找出一个全体正整数的排列方式 a1, a2, a3, … ,使得当你把第一个皇后放在第一行的第 a1 列,把第二个皇后放在第二行的第 a2 列,等等,那么任意两个皇后之间都不会互相攻击。

     

Read more…