问题描述:
Nim游戏:
一共又n堆石子,编号1....n,第i堆中有a[i]个石子。
每一次操作Alice和Bob可以从任意一堆石子中取出任意数量的石子,
至少取一颗,至多取出这一堆剩下的所有石子。
两个人轮流行动,取光所有石子的一方获胜。Alice为先手
给定a,假设两个人都采用最优策略,谁先获胜?
package 数学问题;
/**
* 一共又N堆石子,编号1....n,第i堆中有a[i]个石子。
* 每一次操作小红和小明可以从任意一堆石子中取出任意数量的石子,
* 至少取一颗,至多取出这一堆剩下的所有石子。
* 两个人轮流行动,取光所有石子的一方获胜。小红为先手
* 给定a,假设两个人都采用最优策略,谁先获胜?
*
* 采用异或的形式 只要是异或为零 那你拿了 那就不为零了 对手就可以让它为零 就输了
* 先行者: ①如果非零 那就可以让它为零 这样就拿完
* ②如果为面对为零 无论怎么动 都是非零 所以一定会输
* @author Ad
*
*/
public class Nim游戏 {
public static void main(String[] args) {
int arr[]={3,5,8}; // 3^5^8 !=0 所以先行者一定会赢
solve(arr);
}
public static void solve(int []arr){
int k=0;
for (int i = 0; i < arr.length; i++) {
k=k^arr[i];
}
if (k==0) {
System.out.println("false");
}else{
System.out.println("true");
}
}
}