取石子問題

2021-05-22 14:11:46 字數 1058 閱讀 7276

xiao tang和xiao jiang非常喜歡玩一種有趣的小遊戲: 有n個石子,兩人輪流從中取出1個, 3個或4個石子,當石子被取空時,遊戲結束。最後乙個取石子的人獲勝, 第一次總是xiao tang取. 當然,他們倆都足夠聰明,總會採取最優的策略。

input

每行會有乙個正整數n(n<=100000), 代表石子的個數, n=0 代表輸入結束

output

輸出獲勝人的名字。

sample input12

0sample output

xiao tang

xiao jiang

根據乙個給定的n,單純的看不出來到底是誰能贏.這裡可以設定乙個陣列a[n+1],我們只用a[1]~a[n],a[i] =1代表石子為i的情況下t(代表xiao tang)取勝,a[i]=0代表石子為i的情況下j(代表xiao jiang)取勝t是先手,由此我們可以推出a[1] = 1;(即xiao tang取勝);a[2] = 0; a[3] = 1,a[4] =1;通過上面我們應該知道a[5]的取值是:a[5] = !a[4] || !a[2] || !a[1] = 0 || 1 || 0 = 1;這裡的!a[4]表示xiao tang第一次取1個的情況, 還剩4個,即為!a[4];

歸納如下:

a[n] = !a[n-1] || !a[n-3] || !a[n-4]; (針對n>=5的情況。)

時間複雜度為o(n) 2)

首先當自己拿完就贏,狀態為0。

倒退一回合,自己可以拿1、3、4,對手拿1、3、4。兩者之和有2、4、5、6、7、8的可能,這是剩給對手的方案。下面排除錯誤方案。

2 對手只能拿1,自己拿1。正確方案

4 對手會全拿。錯誤方案

5 對手會拿3,剩2。錯誤方案

6 對手會拿4,剩2。錯誤方案

7 對手怎麼拿,自己都可以全拿或剩2。正確方案

8 對手會拿1,剩7。錯誤方案

所以剩給對手的只能2、7

當倒數第x回合,剩給對手的 nx 是 nx mod 7 = 0 或 2。無論對手怎麼拿,都可以參照上面方案保持優勢。

所以,對給定的n,求個餘數就完成了。

取石子問題

有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這...

取石子問題

描述 有兩堆石子,兩個人輪流去取.每次取的時候,只能從較多的那堆石子裡取,並且取的數目必須是較少的那堆石子數目的整數倍.最後誰能夠把一堆石子取空誰就算贏.比如初始的時候兩堆石子的數目是25和7 25 7 11 7 4 7 4 3 1 3 1 0選手1取 選手2取 選手1取 選手2取 選手1取 最後選...

poj 1067取石子問題

a 取石子遊戲 crawling in process.crawling failed time limit 1000msmemory limit 10000kb64bit io format i64d i64u description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊...