火影手遊 食神比拼活動 怎樣獲勝?!
不務正業篇
【前言】
最近火影手游出了個新活動:食神比拼,我覺得挺有意思的,看看到時候可不可以寫的程式來實現求取一定可以獲勝的方法。
一、問題描述
- 遊戲參與者: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的倍數)
至此,問題已經得到有效的解決,好像不需要程式設計。但是這個假設前提要求比較強烈,最後實際操作能否獲得勝利很大部分還是看天意~