题目:一共有n堆石子,编号1-n,第i堆中有ai个石子,每一次操作A和B可以从任意一堆石子中取出任意数量的石子,至少取一颗,至多取出这一堆剩下的所有石子,两人轮流行动,取光所有石子的一方获胜,A先动手,给定a,假设两人都采取最优策略,谁会获胜
描述:对数组中的每个数进行异或,异或之后如果最终结果是0,那么先拿的就输了,如果结果不是0,那么先拿的就赢了,
public class Main{
public static void main(String[] args) {
int arr[] = {3,4,5}; //3堆石子,先把石子拿完的就赢了
boolean flag = check(arr);
if(flag) {
System.out.println("赢了");
}else {
System.out.println("输了");
}
}
public static boolean check(int arr[]) {
int res = 0;
for(int i=0;i<arr.length;i++) {
res ^=arr[i];
}
return res!=0;
}
}