标签:
一、A和B玩游戏,有n个牌,每人每次只能拿单个质数的幂次(如1,2,3,4,5可以而6不行因为6=2*3,不是单个质数的幂次)个,A先来,然后轮流拿,然后拿走最后一根的就赢,现给定n张牌,判断在最佳策略下谁赢。
先从最简单的情况出发,找规律:
1.当n=1,2,3,4,5时,显然A赢,因为此时A可以一次拿光,在这里把1,2,3,4,5这样必胜的n叫做"必胜态"。
2.当n=6时,A输,此时A不能全部拿光,且无论A拿多少个,剩下的B可以全部拿光,把6这样的情况叫做"必输态",显然必输态时无法一次拿完。
3.由此可推知,当n=6+1,2,3,4,5=7,8,9,10,11时A必胜,因为A只要分别拿1,2,3,4,5个就可以把必输态6抛给B,这时B输;同样,n=12时,A无法拿一定数目(在这里"一定数目指6")产生必输态6给B,相反他只能抛给B一个必胜态。
4.到这里我们已经可以发现规律了,当n是6的倍数时,A输,否则A赢,接下来用第二数学归纳法证明必输态"是且仅是"6的倍数:
1)n<=6时,经计算可得必输态是且仅是6的倍数;
2)假设n<=6k时已证必输态是且仅是6的倍数;
3)那么当n=6(k+1)时,若n不是必输态,那么它必须要减掉一个数得到6的的倍数(由假设已得6k是必输态),既然n本身是6的倍数,那么它一定要减掉一个<=6k的6的倍数,由假设知,<=6k的6的倍数的数是一个必输态,而6(k+1)无法拿走必输态张牌,即无法做到,因而n=6(k+1)也是必输态,当6k<n<6(k+1)时,A只要拿掉1~5张便可把必输态n=6k这个必输态抛给B,使B输,由3)可知,当n<=6(k+1)时,必输态是且仅是6的倍数。
由1),2),3)得证。
故本题解法为:若n为6的倍数,A胜,否则B胜(本题其实并未重点放在单个质数的幂次这个条件上,且6k包含6这个因子,必然不符合条件);
二、A和B玩游戏,共有n张牌,两人轮流拿,A先来,要求A第一次拿的张数>=1且<=n-1(即第一次拿不能一张不拿也不能一下全拿),此后两人轮流拿,每人至少拿一张且至多是前一个人张数的两倍(可以等于),拿走最后一张牌的人获胜,现给定n张牌,判断在最佳策略下谁赢?
首先要明确轮到某个人时,他拿牌的下限为1,而上限由两个因素决定:a.显式的上限是前一个人拿牌的2倍,b.隐式的上限是必须小于现有牌数的1/3,否则下一次对方一次便拿完。
同样先从最简单出发,找规律:
1.n=1,2,3时,A输;
n=4时,A拿1个,B无论哪1个还是2个(最多)都输;
2.n=5时,A输,因为A要满足b上限要求,只能拿<5/3=1.3张,即A只能拿1张(才会暂时不输),而此时相当于他把4张抛给B,B赢;
3.n=6时,A赢,因为b上限要求是n<6/3=2,A只能拿1张,A拿1张就会把5这个必输态抛给B让B输;
n=7时,A赢,A的b上限n<7/3=2.3,A拿2张就又把5这个必输态抛给B,A又赢了;
n=8时,A输,此时A的b上限为<8/2=2.7,A无论拿2张还是1张,都会给B一个必胜态,B胜;
4.现在我们把已得到的A的必输态列出来:1,2,3,5,8可以发现正好是斐波那契数列的一部分,由此我们推想当n为斐波那契数时,A输(不确定的话可以再按以上方法多列几项),接下来用第二数学归纳法证明:
首先要了解斐波那契数里的两个性质:1.任何斐波那契数(从第三项开始)可以表示为前两个斐波那契数之和(定义)
2.齐肯多夫定理:任何正整数都可以表示成若干个不连续的斐波那契数(不包括第一个斐波那契数)之和。
证明:
1)n<=8时,经计算得必输态是且仅是斐波那契数;
2)假设n<=P(k)( P(k)是第k个斐波那契数)时,已证必输态是且仅是斐波那契数;
3)那么n=P(k+1)时,由于P(k+1)为斐波那契数,可以表示为前两个斐波那契数P(k-1),P(k)之和,易证P(k-1)>P(k)/3,即A第1次拿的个数必然小于
P(k)个,由假设可知P(k-1)为必输态,这个必输态其实有一个含义,也就是说B肯定可以拿到第P(k-1)个,此时剩下P(k)个也是必输态(假设)留给A,A就输了。
当P(k)<n<P(k+1)时,n不是斐波那契数,但由齐肯多夫定理知,n肯定可以分解为不相邻的斐波那契数之和(注意,是"不相邻"!)
假设n=P(a)......+P(b)+P(c)+P(d)(按降序排,即P(d)最小),那么由不相邻易知P(d)<n/3,此时A只要拿P(d)张,注意,在这里由“不相邻”有两层重要结论,一是P(d)<n/3(其实拿走P(d)后剩下的最小项也满足,这里不讨论),二是P(c)>2*P(d),即A拿走P(d)之后B无法效仿A再拿走P(c)个,因而B又“陷入”P(c)这个必输态,接下来只要A一直引导B进入接下来的必输态一直到P(a),A就赢了。(在此过程中B无法做出任何反抗),由4)知,当n<=P(k+1)时,斐波那契数是必输态,非斐波那契数是必胜态。
由1),2),3)得证。
故本题解法为:若n为斐波那契数,A必输,否则A必胜。
(目前收录这两道题,后续收集到其他类似题会陆续添加到本博客)
标签:
原文地址:http://www.cnblogs.com/reasno/p/4222945.html