今天做笔试题,看到一道很有意思的思考题,分享出来看看
问题:假设有100个乒乓球,两个人轮流拿取若干球,要求是每次拿的数量最少为1个,最多为5个,如果你是先手,怎么拿保证能100%拿到第100个乒乓球?
这个题一共有两问,
第一:第一次拿几个?
第二:之后每次拿几个?
解析(想看结论的可以跳到最下面)
首先,先分析轮次,题目要求我(自己)拿到第100个乒乓球,证明游戏的最后一轮必须是自己拿球。
由此推断,我是先手,并且最后一轮是我行动,即我始我终,那么游戏进行的轮次为2n-1次,奇数
第二步,抛开第一次我先手拿,由于是我最后一次拿,那么我和对手的回合可以合并看出一个动作,即我和对手在各自的回合内共拿了n个乒乓球,这个动作执行了x轮
这个可能有点乱,举个例子
比如第一次(我先手)拿了3个球
第二次对手拿了2个球
第三次我拿了3个球
这时把第二次和第三次合起来看,这样我和对手在各自的回合一共拿了5个球,这时n=5
以此类推,第四次和第五次视为一次,第六次和第七次视为一次,共计会有x次行动
这时任务就变成了在这x轮内,把100个乒乓球正好拿完(减去第一次我先手拿的a个球)
为什么要正好拿完?
可以列举一下特殊情况:
在最后一轮中,如果剩10个球,对手可以操作一下,先拿4个,到我们时,只能拿1-5个,这样最后肯定会剩最多5个,最少1个,那么是对手赢
同理,如果剩6-9个球,对手那么照样可以拿1-3个球,照样最后会赢
如果剩1-5个呢?对手直接拿走了,也赢了
所以,只要剩球,就赢不了
只有正好拿完,才能赢!
(什么?你说剩10个以上?10个以上本次轮根本就拿不完,就不是最后一轮-.-)
第三步,怎么让x次轮流拿后,正好拿完100个球?
首先考虑我和对手都拿时,一共能拿多少个?
最少2个(1,1),最多10个(5,5),由于我们无法预测对手,那如果要操作这个总数,那只能从我们自身控制
最后发现,只有6个是我们100%能控制的(1,5)(2,4)(3,3)(4,2)(5,1)
那这x轮,我们要控制每轮6个
第四步,我们想起第一轮使我们行动,可以在x轮拿球之前,剔除一部分球
首先用100对6取余,结果为4
那么第一问答案:4个
那么答案已经出来了,先手拿4个,之后每次拿根据前一次对手拿的个数调整,假如对手拿了n个,那我们要拿6-n个,这样才能保证100%拿到第100个球