|
|
发表于 2006 年 1 月 1 日 14:25:11
|
显示全部楼层
答案是:先拿的人赢。
5 R1 D9 K2 ]6 V2 N/ M& C( \, ~- _对于三堆棋子的问题有一个通用的解法,如下:
- ], C; r B+ r+ _; L9 e假设三堆棋子的个数的二进制表示分别是a, b, c,用^来表示二进制的异或。
( }, ?5 ]: I: i; _如果a^b^c=0,则后拿的赢,反之,则先拿的赢。7 I2 A1 h" x4 ]- U
8 W9 z0 b2 k, V D- n
如何赢:
! Q" _; y" |2 m E0 e/ i8 S5 F& V# S如果a^b^c不等于0,那么先拿的人总可以做到每次拿完棋子后,使得
# T( L" n! a8 u, m& l- f剩下的三堆棋子的个数(a1,b1,c1) 满足4 \* I o* s7 C. f2 p
a1^b1^c1=0 (本题中,先拿的人应该从9里面拿4个)
5 g6 m6 i/ Y. y4 L0 l. D- Y/ N9 T& [# j1 p l, M6 e5 m3 o9 h3 }
而后拿的那个人无论拿哪一堆都会破坏这个等式的成立。如果先拿的人每次拿完后,
' J6 d( l+ x, K* B* I% z总是使的剩下的棋子数满足这个等式,后拿的人每次都破坏这个等式,也就不可能
/ f5 o7 \) O- C# [" i达到三堆全0的状态,那么获胜的必然是先拿的人了。" D# K' ^: ~8 ^: ~, g& _; O S
" r Y) u5 [8 {( B
如果一开始三堆棋子的数就满足a^b^c=0,那么先拿的必先破坏这个等式,
F/ w! T) \% n: `8 ^( e后拿的人可以在每次拿棋子后满足这个等式,就获胜了。$ o5 T: m9 ]$ s1 c4 {
& V! x7 D1 j+ P* N" IPS:PM偶个空间^_^ |
|