《程式設計之美》第1.12節:nim(2)"拈"遊戲分析
如果石頭總數n是偶數,則後動手的人能贏;如果石頭數時奇數,則先動手的人贏,先動手的人只要保證每次取完石頭以後,每堆石頭的總數異或後得1即可。
下面程式給出當n是奇數時,應該如何選取,函式返回值pair中first表示取第i堆,i從0開始,second表示把第i堆變成的數,即剩下的數時divided[i]-second。
#include#includeusing namespace std;
pairtakethenheapnum(vector÷d)
int result=0;
for(int i=0;i>maxbit)&1)//如果當前值的maxbit位為1,只需要修改這個數 }
int main()
; vectordevided(a,a+3);
pairresult=takethenheapnum(devided);
system("pause");
return 0;
}
程式設計之美NIM(2)遊戲分析擴充套件問題
問題 有n塊石頭和兩個玩家a和b,玩家a先將石頭隨機分成若干堆,然後按照baba.的順序不斷輪流取石頭,能將剩下的石頭一次取光的玩家獲勝,每次取石頭時,每個玩家只能從若干堆石頭中任選一堆,取這一堆石頭中任意數目 大於0 個石頭。請問 玩家a要怎樣分配和取石頭才能保證自己有把握取勝?如果石頭的個數n為...
程式設計之美 set 17 拈遊戲分析 2
題目 有 n 塊石頭河兩個玩家 a 和 b.a 先將石頭分成若干堆,然後按照 bababa.的順序輪流取石塊,能將剩下的石頭依次取光的玩家獲勝.每次取石頭時,每個玩家只能取一堆的 m m 1 個石頭思路 1.依然舉例子.當 n 1 時,輸.n 2 時,可以分成 1,1.贏 當 n 3 時,分成 1,...
程式設計之美 第一章 1 12拈石遊戲分析
拈石遊戲分析 有n塊石頭和兩個玩家a和b,玩家a先將石頭分成若干堆,然後按照baba.的順序不斷輪流取石頭,能將剩下的石頭 一次取光的玩家獲勝。每次取石頭的時候,每個玩家只能從若干堆石頭中任選一堆,取這一堆石頭中任意數目 大於0 個石頭。問 玩家a要怎樣分配和取石頭才能保證自己有把握取勝?經分析得出...