(本文為自學(xué)筆記检吆,如有錯(cuò)誤敬請(qǐng)指正)
如今有100個(gè)石子漠畜,AB兩個(gè)玩家每次分別可以取走1到7個(gè)石子笼痹,誰(shuí)拿走最后一個(gè)石子則獲勝。
算法概述:
用100對(duì)8取余數(shù)识补,如果余數(shù)為零則先手必?cái)∽寤矗粸榱銊t先手必勝。
推理:
這個(gè)推理有點(diǎn)像走樓梯問(wèn)題凭涂,一次最多可以上兩層祝辣,那么上到最后一層時(shí),有可能是一步上來(lái)切油,也有可能是兩步上來(lái)蝙斜。
對(duì)于本題,我們可以發(fā)現(xiàn)有一種情況我們必勝:對(duì)方剩下8個(gè)石子澎胡。
對(duì)于8這個(gè)數(shù)字孕荠,只要對(duì)方取走,便可以剩下我們可以一次取完的數(shù)量攻谁,并且對(duì)方無(wú)法一次取完8個(gè)石子稚伍。
這樣考慮是將整個(gè)過(guò)程分成了”最后剩8個(gè)石子”和”之前部分”词裤,我們下來(lái)要處理的事情就是如何對(duì)”之前部分”操作使得剛好剩下八個(gè)石子碌宴。
同樣的方式考慮,對(duì)于剩下的92個(gè)石子待逞,如果我們可以拿到第92個(gè)石子即滿(mǎn)足情況受楼。
?寻帷!艳汽!這時(shí)候我們發(fā)現(xiàn)猴贰,這個(gè)問(wèn)題和剛才處理的大同小異,只是數(shù)字不一樣而已骚灸。于是我們把8作為一個(gè)周期糟趾,用100對(duì)8取余,得到數(shù)字4。意味著我們?nèi)绻谝淮稳∽?個(gè)石子义郑,對(duì)方將面對(duì)12個(gè)’8組情況‘蝶柿,他必?cái) ?/p>
反過(guò)來(lái)說(shuō),如果石子的總數(shù)除以8沒(méi)有余數(shù)非驮,意味著我們將面對(duì)八組情況交汤,如果對(duì)手懂得巴什博弈的話(huà),我們就要輸了劫笙!
抽象化:
可以看到芙扎,這個(gè)關(guān)鍵的組數(shù),是一次可以最多選擇的石子數(shù)加一填大。
于是就有了開(kāi)頭的計(jì)算公式戒洼。
參考資料:
1.熊熊的小心心,算法導(dǎo)論專(zhuān)欄允华,CSDN