火影手游 食神比拼活动 怎样获胜?!
不务正业篇
【前言】
最近火影手游出了个新活动:食神比拼,我觉得挺有意思的,看看到时候可不可以写的程序来实现求取一定可以获胜的方法。
一、问题描述
- 游戏参与者:3人
- 烤串总数:45
- 规则:每个人一次可以拿1-5串烤串,依次拿取,最后拿走剩余全部烤串的玩家得5分,其余玩家得2分。
二、心路历程
我的初步思考:假设玩家分别为 A(我)BC,如果我想要获胜的话,我倒数第二次拿过烤串之后剩余7串,那么我有很大概率会获胜。为什么说是很大概率而不是绝对呢?因为,剩7串之后,我能否获胜很大概率取决于B的选择。B如果拿1串,那么给C留6串,他不论怎么拿,最后肯定是我赢;但是如果B是个憨批(对我无益,对他自己也无益,即站在我的视角的损人不利己),他拿的多余1串,那么剩余的C肯定可以全拿完,我就赢不了。
所以,在我的下家是否是憨批这个问题未定的情况下,我是不可能一定会取得胜利的;因而,后面的分析都假设一个前提:B不是一个憨批。
那么,现在问题就转变成:我倒数第二次拿完之后要留7串在盘子里!如何来设计方案实现这个结果呢?
一开始没有太明确的想法,在网上逛了下,发现有个类似的问题:54张扑克牌,两人轮流拿牌,每人每次只能拿1~4张,谁拿到最后一张谁赢。怎么拿牌的才赢?(其实原问题是:先拿牌的怎么才能赢?)按照原问题的话,解决思路是:我先拿牌,我拿四张(剩50张),后面B若拿n张的话,我拿5-n张即可。为什么呢?因为,不算我第一次拿的牌,后面B拿一次我拿一次这样算一轮;一轮下来,牌会减少5张,剩余的牌肯定是5的倍数;最后一轮,无论B怎么拿,我都可以收底。
若我不是A而是B的话,我要想办法构造我拿完牌之后剩余的牌是5的倍数,若成功构造出这样的情景,那么我一定会赢。但是,若A不给我机会构造这样的情景的话,那么我就赢不了。所以,这个问题在两个人都会玩的情况下,先拿牌的人必赢!
这个问题还可以进一步扩展:若54张扑克牌,两人轮流拿牌,每人每次只能拿m~n张,谁拿到最后一张谁赢。关于参照上面的解决思路,只要:构造我拿完牌之后剩余的牌是m+n的倍数 即可。
这是个两人问题,而烤串那个是个三人问题,有第三个人的存在,让这件事的不确定性增加了,同时想要绝对胜利那是不可能的。但是在假定我的下家不是憨批的情况下,我还是有很大概率获胜的。
欧克,看了个例子,我该怎么办呢?
- 首先明确目的:我倒数第二次拿完之后要留7串在盘子里!我们从这里向后推,
- 假设我倒数第二次拿了之后剩余7串在盘子里;
- 那么我倒数第二次拿之前盘子里可以有
8~12
串;好,若该我的时候我盘子里有8~12
串的话,那么我必赢;也就是说,我不可以给别人制造这种机会!假设我的下家不是憨批,也就是说他不会给他的下家制造这种机会, - 那么我倒数第三次拿之后盘子里要有14串,这样的话,我必赢。同样的分析思路,
- 那么我倒数第二次拿之前盘子里可以有
15~19
串,这样的话我必赢; - 那么我倒数第四次拿之后盘子里要有21串(在我的下家不是憨批的情况下)
- 等等,好像真的有规律: 我要构造我拿之后盘子里的烤串数量是7的倍数!
- 若我第一个拿的话,我拿3串(剩42串)那么我必赢!(在我的下家不是憨批的情况下)若我不是第一个拿的话,那就随缘了(想办法构造我拿之后盘子里的烤串数量是7的倍数)
至此,问题已经得到有效的解决,好像不需要编程。但是这个假设前提要求比较强烈,最后实际操作能否获得胜利很大部分还是看天意~