找回密码
 注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

扫一扫,访问微社区

快捷导航
事务所专题-柯南20周年纪念事件簿
搜索
查看: 2851|回复: 0
打印 上一主题 下一主题

[推理谜题] 柯南----扑克牌中的智慧(挑战你的脑细胞!!(已公布答案!见11楼)

 关闭 [复制链接]

侦探助理

0

主题

0

好友

128

积分

 

升级
13%
帖子
205
精华
3
积分
128
威望
6
RP
299
金钱
300 柯币
人气
0 ℃
注册时间
2003-2-21
顶楼
发表于 2003-11-4 19:49:56 |显示全部楼层

回复: 柯南----扑克牌中的智慧(挑战你的脑细胞!!!)

OK,现在把这个问题一般化,建模求一个一般解。

艾玲的问题如果用数学语言表达应该是这样:
小兰从 N 张互异的牌中随机选出 M 张,要求藏其中一张,然后将剩下的(M-1)张按一定次序排列出来放在桌面上,使得和叶能仅根据桌面上这(M-1)张牌的大小和排列次序推断出小兰所藏的牌。

艾玲的题目里,N=54,M=5。

[理论上限]:

N 的上限值是 M!+M-1
证明: 从 N 张互异牌中选出 M 张,共有C(N, M) 种选法,而桌面上 (M-1) 张牌的总排列方式只有 P(N, M-1) 种,所以当 P(N, M-1) < C(N, M) 时,即 N > M!+M-1 时,题目的要求是不可能办到的。

[藏牌办法]:

当 N <= M!+M-1 时,一个可行的方法如下:

给这 N 张牌编号为1号牌,2号牌,...,N号牌,

对于任意的 (M-1) 张牌,都有(M-1)!种排列方式,
小兰可事先与和叶约定好这些排列的顺序,这样可利用 (M-1)张牌排出一个介于1与(M-1)!之间的一个数。

藏牌及排列方法:
将抽出的 M 张牌按大小顺序从小到大排成 P1, P2, ..., PM
定义 Di = Pi-i 为第i张牌的点位差(点数与所排位置的差)
设 P1+P2+...+PM ≡ x (mod M),(x取为1,2,...,M)
藏第 x 张牌 Px,令 y = (Dx+1)/M 向上取整 ( 易知1<= y <= (M-1)! )
用剩下的(M-1)张牌排出数y。


[推断办法]:

和叶看到桌面牌后,从(M-1)张牌的排列次序可得知数y,
设桌面牌从小到大是 Q1,Q2,...Q(M-1)
假设藏牌为 P,排位为x, 其点位差为 D=P-x

则根据藏牌规则 Q1+Q2+...+Q(M-1)+P ≡ x (mod M)
y = (D+1)/M

于是可解得藏牌的点位差 D = (y-1)*M+z-1
其中 z ≡ 1-Q1-Q2-...-Q(M-1) (mod M) (z取为1,2,...,M)

注意: 点位差D的最小值为0,合法的最大值为 N-M
如果算出的值超过这个最大值,则一定是小兰搞错了。

易知,在排好序的牌中,各牌的点位差是非减的,
所以可由此确定D的位置,从而算出P

记牌面各牌的点位差 Di = Qi-i, (i = 1, 2,..., M-1)
并补充 D0 = 0, DM = N-M+1 两个方便书写,
把 D 在Di序列中定位,设 Dk <= D < D(k+1), (k=0,1,..., M-1)
则易知藏牌P 的原排位x= k+1, 由此得 P = D+x = D+k+1
容易验证,这样算出的藏牌正好符合小兰的藏牌规律,
并且不会有另外的牌也满足藏牌规律(即答案是唯一的)

总结起来,推算方法如下:
1) 设桌面牌从小到大是 Q1,Q2,...Q(M-1),并
记牌面各牌的点位差 Di = Qi-i, (i = 1, 2,..., M-1)
并补充 D0 = 0, DM = N-M+1 两个,

2) 算得藏牌的点位差 D = (y-1)*M+z-1
其中 z ≡ 1-Q1-Q2-...-Q(M-1) (mod M) (z取为1,2,...,M)
D值算出应满足 0 <= D < N-M,若不满足则表明小兰搞错

3) 把 D 在Di序列中定位,设 Dk <= D < D(k+1), (k=0,1,..., M-1)
则藏牌为 P = D+k+1

现在用更复杂的108张牌情况来举例:

比如两幅可区分的牌共 108 张,抽出5张,比如编号为 3, 4, 9, 11, 22

x ≡ 3+4+9+11+22 ≡ 4 (mod 5),所以应藏第4张牌11
第4张牌11的点位差D4 = 11-4=7
y = (Dx+1)/M = (7+1)/5 向上取整 = 2
用剩下4张牌 3,4,9,22 依约定排出点数 2

和叶看到桌面4张牌 3,4,9,22, 按排列次序依约定得出 y=2
z ≡ 1-3-4-9-22 ≡ 3 (mod 5),
算得藏牌的点位差 D = (y-1)*M+3-1 = (2-1)*5+3-1 = 7

牌面各牌3,4,9,22的点位差分别是 2,2,6,18
D=7定位在6与18之间,即有 D3 <= 7 < D4, k=3
所以藏牌为 P = D+k+1 = 7+3+1 = 11

[附注]:

实际上,依藏牌规则,对于牌面为 3,4,9,22 的可能藏牌有如下一些:
5,11,16,21,27,32,37,42,47,52,57,62,67,72,77,82,87,92,97,102,107
牌面摆出的y=2正是藏牌11在这个数列中的位置。
所以和叶推断时也可根据牌面和藏牌规则先算出这个藏牌数列,
然后取出这个数列的第y个数就是藏牌了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 新浪微博登陆

手机版|Archiver|名侦探柯南事务所 ( 沪ICP备17027512号 )

GMT+8, 2024-5-24 06:16 , Processed in 0.028444 second(s), 19 queries , MemCached On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部