Nim游戏

问题描述:

 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");
		}
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值