石子遊戲,取石子遊戲

來源:互聯網
上載者:User

石子遊戲,取石子遊戲

http://blog.csdn.net/pipisorry/article/details/39120867

問題描述:

甲乙兩人面對若干堆石子,其中每一堆石子的數目可以任意確定。 兩人輪流按下列規則取走一些石子,遊戲的規則如下: 1.每一步應取走至少一枚石子; 2.每一步只能從某一堆中取走部分或全部石子; 3.如果誰無法按規則取子,誰就是輸家。 如果甲乙兩人都採取最優的策略,甲先拿,請問,是甲必勝還是乙必勝. 輸入格式: 多組資料,每組資料兩行,第一行是一個整數N, 2<=N<=10000 下一行是N個正整數,代表每堆的石子數,石子數在32位整數內。 輸出格式: 每組測試資料輸出一行,如果甲存在必勝策略,輸出"Win",否則輸出"Lost" 

problem from [http://hero.csdn.net/]
挑戰規則: 

輸入範例

 3 3 3 1 

輸出範例:

 Win 


解決方案code:




from:

http://blog.csdn.net/pipisorry/article/details/39120867

ref:



取石子遊戲

這是數論中的最優策略問題,沒有平均數原理。
我好好想想再給你答案。
要上班了,下班繼續思考……(時間不多,才回複,見諒)
1. 從50中取走32粒剩餘18粒是正確的。
2. 演算法:從其中一堆中取n個,使得剩餘的所有數目正好是“必負局(此時先取必輸的局面)”。
3. 所謂“必負局”是指把剩餘的每一堆的數目都轉化成二進位的數,然後把它們相加,規定做不進位的加法(也就是異或運算),即0+0=0,1+0=0,0+1=1,1+1=0(不進位),如果所得和是0(多個0),那麼此種局勢稱為“必負局”。
4. “必負局”原理:一個“必負局”,一次改動任何一個數,都將不再是“必負局”,同時,任何一個“非必負局”,通過正確地減少某個數,一定能變成“必負局”,並且這種操作是唯一的。設想現在是“必負局”,假如你先取,勢必把其中的某個數的1改成了0,0改成了1,一定不再是“必負局”了,而我一定可以在把它變會“必負局”。其實這樣的局勢,相當於偶數,你取了,必定有對應我取的,所以我一定拿到最後一個。簡單的想,考慮只有兩堆,那麼如果原來不相等,那就是“非必負局”,先取者有必勝方式,只要取多的一堆使得兩堆相等,之後你取幾個,我就從另一堆取幾個。
5. 應用:(也許格式會改變)
19 010011
7 000111
5 000101
3 000011
010010 (18)10
也就是,還要18才能變成“必負局”,所以50-18=32
所以第1次只能在第5堆石子中取32粒,使得取出32粒後為“必負局”,即異或運算結果為0。
 
石子遊戲

雙方都採取最好的策略,這個有點難度。
不過我會慢慢想的,說不定幾天后就能做出來
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.