n 顆。分析小數值發現規律:
| n | 先手勝負 | 原因 |
|---|---|---|
| 1,2,3 | 勝 | 直接取完 |
| 4 | 負 | 無論取 1/2/3,對手取剩餘獲勝 |
| 5,6,7 | 勝 | 取 1/2/3 留 4 給對手 |
| 8 | 負 | 對手可總是留 4 的倍數 |
結論:n % 4 == 0 時先手必敗,否則先手必勝。
bool canWinNim(int n) {
return n % 4 != 0;
// 等價位運算寫法
// return n & 0x03;
}
n=0 為必敗態(輪到你時無石子可取)。n % 4 == 0 為必敗態,其餘為必勝態。若每次可取 1~k 顆,則 n % (k+1) == 0 為先手必敗態。本題 k=3,故模 4。
Nim 遊戲是組合博弈論入門經典,掌握「模 (k+1) 律」與位運算技巧(n & k 當 k+1 為 2 的冪次時),可 O(1) 解決此類取石子遊戲問題。