看守打算和 A 、 B 两名囚犯做一个游戏。首先,看守从一副牌中取出大小王,将剩余的 52 张牌洗好,并在桌子上从左至右地把它们摆成一排,每张牌都是正面朝上。然后,看守让囚犯 A 来到桌前,允许囚犯 A 观察牌面,并交换其中两张牌的位置。接着,看守将囚犯 A 关回牢房,把所有牌全都翻到背面朝上(但位置不变),让囚犯 B 来到桌前。看守随便报出一张牌的花色和点数(比如“梅花 3”),要求囚犯 B 找出这张牌。囚犯 B 每次可以翻开任意一张尚未翻开的牌,但一共只有 26 次机会。如果囚犯 B 在这 26 次机会之内找到了看守想要的牌,则两名囚犯赢得游戏,无罪释放;如果囚犯 B 翻开了 26 张牌之后,还没找到看守想要的牌,则两名囚犯输掉游戏,立即死刑。在整个游戏开始之前,两名囚犯可以商量一个策略;游戏开始后,两人就不能有任何其他形式的交流。果不其然,这又是一个关满了数学天才的监狱。两名囚犯碰头后,很快就商量出了一种必胜的策略。这种必胜的策略是什么?
两名囚犯可以约定一种用 1 到 52 给扑克牌进行编号的方案。于是,桌上的扑克牌就相当于是写有 1 到 52 的卡片形成的一个排列了。假设现在所有的牌都是背面朝上的。想一想,如果你翻开某张牌,看看牌上写的是几,然后就去翻左起第几张牌,并不断地这样做下去,最后的结果是什么?最后的结果是,你迟早会回到出发点。假如你翻开了左起第 5 张牌,牌上写的是 34 ;你又翻开了左起第 34 张牌,结果牌上写的是 18 ;你又翻开了左起第 18 张牌,结果牌上写的是 13 ……总有一个时候,你会翻到一张写着 5 的牌,于是你就回到了出发点,得到了一个“圈”。这个圈并不一定涵盖了桌上的所有牌,换句话说,这个圈的长度并不一定是 52 。那么,再随便翻开一张尚未涉及到的牌,并不断根据牌上的信息翻开下一张牌,最终又会得到一个新的圈……也就是说,不管桌上的扑克牌是怎样排列的,它都可以被分解成若干个这样的圈。
所以,倘若看守想要的牌的编号是 15 ,那么囚犯 B 就可以翻开左起第 15 张牌,然后让牌上的数指引他继续往下翻牌。只要 15 所在的圈的长度小于等于 26 ,囚犯 B 就能在 26 步之内翻到写有 15 的牌,从而赢得游戏。而囚犯 A 的任务就是,想办法交换其中两张牌,让任何一张牌所在的圈的长度都不超过 26 。这确实是总能办到的。如果左起第 a1 张牌上写有 a2 ,左起第 a2 张牌上写有 a3 ,以此类推,一直到左起第 an 张牌上写有 a1 ,那么交换左起第 a1 张牌和左起第 ak 张牌,结果会怎么样呢?注意到,左起第 a1 张牌上现在写的就是 ak+1 了,左起第 ak 张牌上现在写的就是 a2 了。于是,这个长度为 n 的圈会被打断成长度分别为 n – k + 1 和 k – 1 的两个小圈:
|
|
1 到 52 的排列中,长度超过 26 的圈最多只能有 1 个。适当选择 k 的值,便能把它变成两个长度均小于等于 26 的小圈。这样,囚犯 B 便能保证在 26 次之内找到看守想要的牌,两人也就必胜了。
这个题目是我在 reddit 上看到的。
沙发
前排挤一挤啊
打卡
受教了,一定要多动动脑呀。
“适当选择 k 的值,便能把它变成两个长度均小于等于 26 的小圈”具体要怎么实现呢?
运算我不是很在行,不过不知这样可不可以:首先把在自己位置的牌排除,然后把各自的圈分出来,然后找出大于26的圈,然后想象大圈的牌排成了一个大圆圈,再把大圈位于6点钟方向的牌和位于12点钟方向的牌交换位子,这个大圈就变成两个小圈了。
实际上是可以存在一个2.3.4.5.6……51.52.1的完整大圈的吧,这个时候,只能把6点和12点方向的牌交换,组成两个26的圈
不知道能不能这样想
为什么还要摆出来……如果存在≥27的圈,从任意一张开始 (在一个圈里任何一个都是等价的),往下数,数到第27个交换不就行了么?
因为我的思维过程是这样的。对于我来说,我得先“看见”,就得先想象摆出来一个圆圈,才能看得到你说的“从任意一张开始 (在一个圈里任何一个都是等价的),往下数,数到第27个交换”。。。智商不够没办法呀
在知乎上看到一个100个囚犯跟100个抽屉的题目,解法和这个很相似,也是通过形成环的方法把释放几率从完全随机选择的小数点后十几位变成0.3多
这里也有法师出没?Exciting!
嗯…
最坏情况是有2个长为26的圈,要找的数在一个圈里,不过怎么确定从哪个圈开始找呢
“看守”让你找的牌对应于编号的第几号,就从左起第几个位置开始翻,就能保证一定在正确的圈子里。
看守让找第15号牌并不代表它就在第15张牌构成的圈里啊
在的,第十五张牌的圈子里包含着15号牌。因为反过来想,15号牌的圈子里可是包含着第十五张牌的。
因为这是一个圈,而写着15的那张牌指向的是第十五个位置,所以从第15个位置开始翻牌,把整个圈里的所有牌都翻过一遍,最后一张就是写着15的牌
博主这个月很给力啊,一下更了这么多!
如果恰好只有一个52的圈,那么怎么分也必有一个比26长吧。
好吧,我承认我脑残了。
来注册我们自媒体吧,这么好的内容,你的书我也有看,很有意思,这么好的内容,应该让更多人知道
楼主的都是好文章 因吹丝婷
分拆了n个长度小于26的圈,但不能保证26次机会内翻到想要的牌,牌可能是在最后一个圈内吧
哦,忽略了一个细节,按照说出的编号找的第一个圈,牌肯定在里面
理解了 thx
如果看守让囚犯B找梅花3,但他并不知道是编号几啊?怎么开始第一步呢
所以一开始,prisoner之间要约定好牌对应的编号呀
sorry,理解错了,原来编号他们是知道的
贊!!
好神奇!
一开始看到这个点,直接思路就错了。想着如何通过第一张牌作为flag标记。然后怎么都没法排除26张牌。。
很神奇。
没弄懂,一会k,一会n是几个意思呢?n代表啥,k又代表啥呢?
so interesting
囚犯A知道看守要找哪张牌吗?岂不是要考虑全部情况,会不会相互冲突?
怎么证明在52张牌中,至多只有一个长度超过26的环?
首先,显然各个环之间两两不相交。然后反证,假设存在两个长度超过26的环,那么总的牌数超过52,这与“总共有52张牌”矛盾。
其实我想知道为什么牌会在第一个圈里
一上来就说了- -从第五张牌按照规则开始翻,就一定能翻到5.因为是一个环呀~你可以自己用几张牌试一下,就很容易明白
如果有大于26个环怎么办
牌是洗好的,那么这个规则是怎么却定的?就是无厘头的从右往左编号然后错开吗?这点想不通。求大神解答。
比如先讨论好红桃A为1,按顺序红桃A-K就为1-13,黑桃A-K为14-26,梅花A-K为27-39,方块A-K为40-52,随后看守洗牌,因为52张牌里最多只存在一个圈的长度大于26,所以只要找到这个圈,然后调换两张牌的位置,使无论从哪张牌出发,圈的长度都小于等于26,那就不会输
博主好列害啊
我只有一个问题
为什么这些天才数学家都被抓进监狱了
因为里面个个都是人才,说话又好听,超喜欢在里面的
要仅用一次交换就构造两个恰好都长26的圈需要依赖于初始排列吧?最极端的情况,假如狱卒摆牌的顺序恰巧和囚犯约定的编号顺序完全一致(左起第i张牌上写i),只交换两张牌只能得到一个长度为2的圈和50个长度为1的圈?
理解错了……不好意思
好厉害啊!