故事是这样的
小涵对小李说我们来玩一个拿球游戏,你说桌子上有多少个球,每次可以拿1到3个球,最后谁拿光桌子上的球谁就赢了
小李:30个球,你先拿
小涵:2个(剩28)
小李:1个(剩27)
小涵:3个(剩24)
(青蛙开始感觉水温不太对)
小李:3个(剩21)
小涵:1个(剩20)
小李:2个(剩18)
小涵:2个(剩16)
小李:1个(剩15)
小涵:3个(剩12)
小李:3个(剩9)
小涵:1个(剩8)
小李:2个(剩6)
小涵:2个(剩4)
随后小李尝试了29个,31个最终都没能得逞(青蛙发现了水温不对但是没能成功跳出来)
但是聪明的小李开始了思考,怎样就是一个必输的状态呢?
到最后,在游戏规则的前提下,没办法进行操作了,那么就是输了,看看输掉的这几局,我们发现最后剩下的球是4个,那么当前这个人就没办法操作了,不管拿几个,都会剩下能一次拿完的数量的球。换句话说,我们要是能在最后轮到对方拿球的时候给他剩下的是4个,那么我们就赢了
现在来想,怎么能给他剩下4个球呢,我们得提前就算好一种能够必胜的策略,否则到后面球少了对方可能就也算出来了,我们把球按4个4个的分堆,每次呢都让对方先拿球,这样对方拿n(1-3)个我们就拿(4-n)个,就可以保证我们胜利了,但是前提是桌上的球得正好是4的倍数,也就是说
num % 4 == 0 //num是球的总数
这个时候,先手是必输的
如果
num % 4 != 0 //num是球的总数
我们先手给他拿掉多于出来的,就是总数对4取余的数量,比如29个球,就先手拿了1个,这时候就变成了28个球(4 * 7 = 28)对方先手拿,他必输
(终于,青蛙把火关掉了,水温逐渐下降)
巴什博奕
上面说的这个游戏其实是有一个专业名词的,叫巴什博奕(可以自行百度一下)
我就通俗的解释个大概我了解的:
一堆物品有N个,每次可以拿M个(M<N)
如果(N mod M == 0)
先手必败
具体的东西上面已经分析过了,就是换成个N和M整成个公式,说一下不一定非要是每次拿1-3个,每次拿8个也能想办法获胜,就凑M+1就行了