主题
最后登录1970-1-1
回帖0
精华
积分124
威望
RP
金钱 柯币
人气 ℃
注册时间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个数就是藏牌了。 |
|