火影手游 食神比拼活动 怎样获胜?!

不务正业篇
【前言】
最近火影手游出了个新活动:食神比拼,我觉得挺有意思的,看看到时候可不可以写的程序来实现求取一定可以获胜的方法。
在这里插入图片描述


一、问题描述

  • 游戏参与者: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的倍数)

至此,问题已经得到有效的解决,好像不需要编程。但是这个假设前提要求比较强烈,最后实际操作能否获得胜利很大部分还是看天意~


posted @ 2020-12-14 11:54  流浪猪头拯救地球  阅读(401)  评论(0编辑  收藏  举报