兩個足夠聰明的人玩輪流取石頭的遊戲,誰取到最後乙個石頭誰就贏了,他們一次只能取1個、3個、7個或8個石頭,寫一程式判斷n個石頭時先取的人是輸還是贏。
乙個整數n,其值不超過10000000。
如果先取的人贏,請以單獨一行輸出1,否則輸出0。
這裡是3組輸入。
1
10
300
上面3組資料對應的輸出分別如下:
1
1
0
兩個人只能每次取1,3,7,8 個石頭,且都想讓自己贏。隨機給定一石頭總數,判斷第乙個取的人是贏還是輸,也就是說只要輸入n已定,第乙個人的輸贏就定了。所以其中一定蘊含某種規律性的方法,即當該問題較大的時候就可以分解為小的問題解。
每個人每次都有且只有四種選法,且受石頭總數限制。因石頭總數為1,3,5,7,8時第乙個人贏,2,4,6時第乙個人輸,所以當n大於8時只需要把問題降階到8以內即可求解,比如 n為 10,第乙個人取後剩餘石頭的情況有 9 7 5 3 2,而這些情況中的輸贏已經是確定的了,而且只要其中有一種情況第乙個人能贏,在n個石頭時,他就可以贏,只有所有的情況都贏不了,他才會輸。
因發現所有的第乙個人贏的數 滿足15一迴圈,所以:(也可以反著來寫,即0,2,4,6 時候輸出0,這樣更方便)
#include#include#include#includeusing namespace std;
int main();
dp[1]=dp[3]=dp[5]=dp[7]=dp[8]=dp[9]=dp[10]=dp[11]=dp[12]=dp[13]=dp[14]=true;
coutint main();
bool dp[maxn]=;
int main()
輪流取石頭
兩個足夠聰明的人玩輪流取石頭的遊戲,誰取到最後乙個石頭誰就贏了,他們一次只能取1個 3個 7個或8個石頭,寫一程式判斷n個石頭時先取的人是輸還是贏。輸入格式 乙個整數n,其值不超過10000000。輸出格式 如果先取的人贏,請以單獨一行輸出1,否則輸出0。輸入樣例 這裡是3組輸入。輸出樣例 上面3組...
取石頭遊戲 博弈論 數學規律
兩個足夠聰明的人玩輪流取石頭的遊戲,誰取到最後乙個石頭誰就贏了,他們一次只能取1個 3個 7個或 8個石頭,寫一程式判斷 n個石頭時先取的人是輸還是贏。輸入格式 多組輸入,乙個整數 n,其值不超過 10000000。輸出格式 如果先取的人贏,請以單獨一行輸出 1,否則輸出0。輸入樣例 1 10300...
P3210 HNOI2010 取石頭遊戲
題目鏈結 博弈論好題!但是還沒有完全弄懂.主要的思想就是判掉 上三角 的情況,因為這種情況看起來比較劣,大家會把它放最後再選,並且一定會連續地選,即 先手 選第乙個和第三個,後手 選第二個.理性理解失敗,只能感性理解 處理掉 上三角 以後,就可以直接從大到小選了。然後會發現樣例都 wa 了。這是因為...