尼姆博弈
尼姆博弈:
有任意堆糖果,每糖果的数量是任意的。张三和李四由于疫情在家无聊进行游戏。两人开始拿糖果,拿到最后一个糖果胜利,获得全部糖果。每次拿最少拿一个或者全部。
我们假设有三堆糖果,分别是(A,B,C);(A,B,C)表示一种局势(就是说在要你选了,你立即面临局势,无论前面是否进行了多次的拿糖果)。当你选择某堆糖果时,就会输。俗称奇异局势。
1)(0,0,0)显然必输局势。
2)(0,n,n)无论你选择了多少个糖果,对方就可以和你选择一样的糖果。然后你必输。
3)(1,2,3)无论你选择了多少个糖果,对方就可以变成(0,n,n)格式。
任何奇异局势都可以变成A xor B xor C=0;都成立你输了。
当我们在面临非奇异局势(A,B,C),我们可以A<B<C,我们让C变成AxorB
a xor b xor (a xor b)=(a xor a) xor (b xor b)=0 xor 0=0.要将c 变为a xor b,只要从c中减去c-(a xor b)即可。
我们就可以让A xor B xor C是否为0,如果为零,则先手必败,反之
public static P(){
int n;/*n表示n堆糖果
int a[] = new int[n];
int temp=0;
for(int i=0;i<n;i++){
a[i] = sc.nextInt();
temp^=a[i];
}
if(temp==0) System.out.println("先手必输");
else System.out.println("后手必输");
}