牛牛和羊羊吃草問題

題目描述如下:

牛牛和羊羊共吃一堆青草,牛牛先吃。吃草的規則爲,一次只能吃4的整數次冪,如 1、4、16、64…牛牛羊羊輪流吃,誰最後能把草一次吃完誰贏得比賽。現在給出一堆草的數量,牛牛和羊羊都按照規則並且按照最優的方法去吃,問誰能贏?`

遞歸的解法

剛看到這題目的時候,第一反應就是和兩個人輪流撿石子,一次只能撿1、2、3個石子blabla…的題目一樣,撿石子的解爲f(n) = !(f(n-1) || f(n-2) || f(n-3))。但是這一題的情況看似類似,實則差別很大,因爲 f(n) 依賴於f(n)自身、f(n-1)、f(n-4)、f(n-16)、f(n-64)……,遞推關係的依賴的狀態太多。如果使用遞歸,直接爆炸。因此遞歸的解法行不通

非遞歸的解法

請看這位基友的分析:
https://blog.csdn.net/qq_27576655/article/details/80048800

在此基礎上,我發揮了一下想象力,繼續總結一點我的想法。
1.吃草規則的簡化

吃4的整數次冪1、16、64、256、…,尾數有3種情況:1、4、6,模5之後只有1和4兩種情況。即一次只能吃1 (mod 5) 或 4 (mod 5)數量的草

2.基於簡化後的吃草規則,面對數量爲R的草堆,應該怎麼吃

面對R==0(mod 5)的情況,牛牛隻能吃1(mod 5)或4(mod 5),因此牛牛吃完後,剩餘的草量只能爲1(mod 5)或4(mod 5),對於兩種情況,羊羊都能在吃完之後使剩餘數量爲0(mod 5)。因此羊羊可以做到:使牛牛始終面臨的草量都爲 0(mod 5),其一種特殊情況即 0,因此這種情況牛牛必輸。
面對R==1(mod 5)或R==4(mod 5)的情況,牛牛都可以把草的數量變爲0(mod 5),而羊羊面對0(mod 5)的草堆必輸,因此牛牛必贏。
面對R==2(mod 5)的情況,牛牛隻能把草的數量變爲1(mod 5)或者3(mod 5),此時他當然只能選擇3(mod 5),如此羊羊可以選擇吃1(mod 5)個草來使得R==2(mod 5),因此羊羊可以做到:使牛牛始終面臨的草量都爲2(mod 5),其中特殊情況即2,因此牛牛必輸。
面對R==3(mod 5)的情況,牛牛可以吃1(mod 5)個草,使得羊羊必輸,因此牛牛必贏。
因此可以得出:
R==0(mod 5)或R==2(mod 5)時牛牛必輸;
R==1(mod 5)或R==3(mod 5)或R==4(mod 5)時,牛牛必贏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章