这是之前在某个国外论坛刷到的一道推理题,来源不记得了,我大致复述一下题目和答案吧:
我遇到了一位魔术师,他带着一名助手,向我变了一个扑克魔术。他是这样变的:他让我自己找了一副扑克牌,没有大小王,所以可以确保这副牌绝对没有动过手脚。然后我自己洗牌后,随意抽5张牌,并将这5张牌交给他的助手(我知道这5张牌是啥)。他的助手将其中四张给了魔术师,另一张给了我。魔术师看了那4张牌后,便说出了我手上那张牌的花色和大小。
整个过程魔术师都没有碰到牌,直到他的助手将那4张牌递给他。并且我能保证整个过程魔术师和助手都没有任何眼神交流等,意味着魔术师只是通过那4张牌的内容推理出了我手上那张牌的内容。但是我发现助手在把另外四张牌给魔术师之前对它们交换了一下顺序。
我当然知道魔术师和他助手之间提前约定了好了一些操作,来让魔术师仅根据那4张牌来推导出我手上那张牌,但是这5张牌都是我自己随机选的,就算助手再怎么交换顺序,4张牌也无法涵盖48张牌(52-4)张牌的信息啊!
我无论如何也想不到他们到底是怎样做到的。
问题:这个魔术的奥秘究竟是什么?答案如下:
我把这个故事继续讲下去吧,我回到家里开始苦思冥想,魔术师通过4张牌知道了我手上的牌,先不管他是如何做到的,他必然是分别确定了我的花色和大小。注意到魔术师的4张牌和我手上的1张牌都是由魔术师的助手确定的,所以助手可以选择性的从5张牌中选1张出来给我,剩下的给魔术师。
确定花色:扑克牌的花色有4种,而牌一共有5张,根据鸽巢原理(抽屉原理),必然有一种花色,在这5张牌中有两张以上的牌是这种花色。那么助手就可以选择这种花色,将其中一张给我,另一张放到四张牌的最上边。这样魔术师只需要通过最上面那张牌的花色就知道我手上的牌的花色了。
确定大小:虽然5张牌是完全随机的,但是他们可以确定大小顺序。记J=11,Q=12,K=13,我们规定两张扑克牌的大小比较规则为:先比较数值,数值大的扑克牌为大牌;若数值相等,则按照黑桃>红桃>梅花>方块。比如黑桃9>红桃9,梅花k>方块k,方块8>黑桃5等等。
这样,在助手给魔术师的4张牌中,其中一张放到了最上面,剩下三张可以排列出
种不同的大小顺序,我们给每一种顺序定义一个数值:小中大=1,小大中=2,中小大=3,中大小=4,大小中=5,大中小=6。这样魔术师就可以任意拥有1-6这6个数字其中一个。但是扑克牌一共有13个数字啊。
这似乎无解了,3张牌无论如何都无法确定出13个数字来。我又陷入了苦思,我开始注意到被放到最上方的那张牌,它除了帮助魔术师确定花色外,还有其他作用吗?它肯定有作用!否则魔术师不可能通过这三张牌确定大小的。它的花色作用已经没法用了,那么只剩下它的数值能拿来用了。
我开始整理我手头的信息:我可以任意获得1-6这6个数字中的一个,我记为i;我有另一个1-13的随机数字,我记为j;我要用它们确定另一个1-13的数字,我记为x。
加法?我开始兴奋起来,如果有x=i+j,那就大功告成了!但这高兴没持续多久就平息了下来,因为我发现j和x是随机的,它们之间可能相差大于6,比如x=11,j=2,永远不可能凑出i+j=x因为
。我的脑洞帮助了我,我当时的思路是:有没有办法能让它们相差始终在6之内呢?我看着墙上的钟,指针过了12点,又慢慢来到1点。。。突然,我灵光一现!
由于x和j都是1-13的数字,当x-j>6时,因为j>1,所以x>7,且j<
7。若x<=7或者j>=7,不可能存在x-j>6的情况。
所以我们可以凑出i+x>13来。它有什么用呢?我们规定一种新的加法运算
:当两个数的和>13时,减去13作为其结果。比如6+10=16>13,此时我们规定
。这是我自己发明的「循环加法」,就像钟表一样,超过12后又从1开始了。
整理一下:我们令x为我手中那张牌的数值,j为魔术师手上最上方那张牌的数值,i为剩下三张牌的顺序对应的数值。
第一种情况:当x-j<=6时,我们可以交换3张牌的顺序,凑出一个i来,使得i+j=x,这样魔术师就知道我手上那张牌的大小了;
第二种情况:当x-j>6时,助手应该把j那张牌给我,把x给魔术师,因为x此时必然是>7且j必然是<
7的,此时我们可以交换3张牌的顺序,凑出一个i来,使用我们的循环加法使得
,我们可以证明:当0<
j<
7且7<
x<=13时,这样的
是必然存在的。
我们全盘梳理一下:
当我把5张牌递给助手时,根据鸽巢原理,必然存在一个花色,其牌有两张以上,我们假设就是黑桃吧。助手看见黑桃有两张以上,那么就可以选择一张给我,另一张放到最上方给魔术师。剩下三张取决于这两张黑桃的差值:
若这两张黑桃相差<
7,就把大的那张给我,假设其值为x吧,然后把小的那张放到最上方,假设其值为j吧,然后用剩下三张牌凑一个i=x-j出来,因为x-j<
7,所以能用1-6的数字表示出来,所以可以凑出来,然后助手将这4张牌给魔术师,魔术师根据最上方牌的花色,确定我手上的花色是黑桃,然后根据下方三张牌的顺序确定数值i,然后用 i+j计算我手上的牌,因为在这种情况下i+j必然<
13,所以i+j的值直接就是我手上那张牌的值了。这样花色和数值都知道了;
若这两张黑桃相差>7,就把小的那张给我,同样假设其值为x,然后把大的那张放到最上方,假设其值为j吧,然后用剩下三张牌凑一个i=13+x-j出来。因为j-x>7,所以i仍然是在1-6的范围内可以凑出来的。魔术师发现i+j>13,根据循环加法的规则,用i+j的值减去13就得到了x。
举两个例子:假如5张牌为
红桃5,红桃8,黑桃3,梅花9,方块7
助手发现红桃有两张,那么就应该把其中一张给我,另一张放到4张最上面。因为8-5=3<
7,直接可以用黑桃3,梅花9,方块7凑一个3出来,即按照我们之前约定的:中小大=3,那么这三张牌摆成方块7、黑桃3、梅花9的顺序,这样魔术师就知道这代表3,然后把红桃5放在最上面给魔术师,红桃8给我。魔术师那边看到的是,红桃5在最上面,那么我手上的牌是红桃;下面三张牌的顺序是中小大=3,加上最上面的红桃5的数值=8,没有超过13,那么8就是我手上那张牌的大小,所以我手上的牌是红桃8。
第二个例子:
黑桃4,黑桃Q(12),红桃5,梅花5,方块9
助手发现黑桃有两张,那么就应该把其中一张给我,另一张放到4张最上面。因为12-4=8>7,那么应该把黑桃4给我,黑桃Q放到4张最上面。而4+13-12=5,所以可以用红桃A,梅花5,方块9凑一个5出来,也就是大小中=5,即顺序为方块9、梅花5、红桃5,然后把黑桃Q放到最上面给魔术师,黑桃4给我。魔术师那边看到的是,黑桃Q在最上面,那么我手上的牌是黑桃;下面三张牌的顺序是大小中=5,加上最上面的黑桃Q的数值=5+12=17>13,按照循环加法应该减去13,所以17-13=4,也就是我手上那张牌的数值,所以得到我手上的牌是黑桃4。