尼姆堆
有3堆硬幣,分別是3,4,5
二人輪流取硬幣。
每人每次只能從某一堆上取任意數量。
不能棄權。
取到最后一枚硬幣的為贏家。
求先取硬幣一方有無必勝的招法。
// 尼姆堆的模2加(異或)解法 /*1010111001110 --------0101 */ public class Main {static void f(int[] a) {int sum = 0;for (int i = 0; i < a.length; i++) {sum ^= a[i];}if (sum == 0) {System.out.println("輸了");return;}for (int i = 0; i < a.length; i++) {int x = sum ^ a[i]; //x ^ y ^ y得到的還是x, 我們把sum跟某個異或,得到和其他三個異或的情況,然后再和這三個異或就得到sum初值if (x < a[i])System.out.println(a[i] + " --> " + x);}}public static void main(String[] args) {int[] a = { 2, 5, 12, 14 };f(a);} }?
轉載于:https://www.cnblogs.com/jizhidexiaobai/p/8594536.html
總結
- 上一篇: 你对博客中提到的评分规则有何意见和建议?
- 下一篇: 设计的法则