1. Nim 游戏的必胜判定为何等价于各堆石子数的异或和非零?用数学归纳法证明,异或零态的任何移动都导致非零态,非零态总存在移动回到零态
用数学归纳证明 Nim 游戏必胜判定等价于各堆石子数的异或和非零?
- Nim 异或和判定的两个方向
- 异或零态任何移动都变非零
- 非零态总存在移动回到零态
设异或和为 S。若 S=0,任何移动改变某一堆(如把 a_i 改为 a_i'<a_i),则新异或和 S' = S ⊕ a_i ⊕ a_i' = a_i ⊕ a_i' ≠ 0,因为 a_i ≠ a_i' 时异或不为零,故零态的任何移动都到非零态。若 S≠0,设 S 的最高位在 k,则存在某堆 a_i 的第 k 位为 1;令 a_i' = a_i ⊕ S(因 S 的最高位 k 处 a_i 为 1,异或后该位变 0 且更高位不变,故 a_i' < a_i),把 a_i 降为 a_i' 后新异或 S' = S ⊕ a_i ⊕ a_i' = S ⊕ a_i ⊕ (a_i⊕S) = 0。故非零态总存在移动回到零态。由此归纳:异或非零为先手必胜态(P/N 判定),异或零为必败态。
这是 Nim 的经典证明:零态是"冷态"(任何移动都进热态),非零态是"热态"(可一步到冷态)。归纳保证由终态(全零,异或为 0,必败)向上推,所有异或零态必败、非零态必胜。
boolean nimWin(int[] piles) {
int s = 0; for (int x : piles) s ^= x;
return s != 0; // 先手必胜
}