有趣的题目:从装有 n 个白球 和 m 个黑球的袋子中不断拿出两球,求最后一个球的颜色

文章讲述了如何通过将白球和黑球与二进制的0和1类比,利用异或操作来判断当袋中只剩一个球时其颜色。作者给出了简化后的代码并进行了测试,结果显示颜色取决于初始黑白球数量的奇偶性。
摘要由CSDN通过智能技术生成

袋子里有 n 个白球,m 个黑球 (0<= n+m <= 100000)


每一次操作从袋中拿出两个球,若为两个白球或两个黑球就放回一个白球,一黑一白就放回一个黑球


求当袋子中只剩下一个球时,球的颜色是什么

乍一看我深吸一口气,这题好难,但是转念一想,黑球和白球的放回逻辑与二进制中的 0 和 1 的异或逻辑是一样的

根据题目的描述,我们可以将白球当成是二进制中的 0,黑球当做二进制里的1,将所有的结果异或后得到的结果就是最终留下的球的花色
 

注:前置知识:

① 任何数异或或 0 等于它本身   

② 无论一个序列的顺序如何交换,它的亦或结果都是一样的

代码如下:

static String judge(int n,int m){
	int xor = 0;
	//这一步可以省略,因为亦或0是无效操作,这里写出是为了便于理解
	for(int i=0;i<n;i++){
		xor ^= 0;
	}
	//这一步可以简化为 -> xor =  m % 2 == 0 ? 0 : 1;
	for(int i=0;i<m;i++){
		xor ^= 1;
	}
	return xor == 0 ? "白" : "黑";
}

简化后的代码:

static String judge(int n,int m){
	return m % 2 == 0 ? "白" : "黑";
}

我们测试一下运行结果

测试代码:

public static void main(String[] args) {
	for(int i=0;i<5;i++){
		for(int j=0;j<5;j++){
			System.out.println(i+" "+j+" 最终颜色judge1:"+judge1(i,j)+" ----- 最终颜色judge2:"+judge2(i,j));
		}
	}
}

运行结果:

0 0 最终颜色judge1:白 ----- 最终颜色judge2:白
0 1 最终颜色judge1:黑 ----- 最终颜色judge2:黑
0 2 最终颜色judge1:白 ----- 最终颜色judge2:白
0 3 最终颜色judge1:黑 ----- 最终颜色judge2:黑
0 4 最终颜色judge1:白 ----- 最终颜色judge2:白
1 0 最终颜色judge1:白 ----- 最终颜色judge2:白
1 1 最终颜色judge1:黑 ----- 最终颜色judge2:黑
1 2 最终颜色judge1:白 ----- 最终颜色judge2:白
1 3 最终颜色judge1:黑 ----- 最终颜色judge2:黑
1 4 最终颜色judge1:白 ----- 最终颜色judge2:白
2 0 最终颜色judge1:白 ----- 最终颜色judge2:白
2 1 最终颜色judge1:黑 ----- 最终颜色judge2:黑
2 2 最终颜色judge1:白 ----- 最终颜色judge2:白
2 3 最终颜色judge1:黑 ----- 最终颜色judge2:黑
2 4 最终颜色judge1:白 ----- 最终颜色judge2:白
3 0 最终颜色judge1:白 ----- 最终颜色judge2:白
3 1 最终颜色judge1:黑 ----- 最终颜色judge2:黑
3 2 最终颜色judge1:白 ----- 最终颜色judge2:白
3 3 最终颜色judge1:黑 ----- 最终颜色judge2:黑
3 4 最终颜色judge1:白 ----- 最终颜色judge2:白
4 0 最终颜色judge1:白 ----- 最终颜色judge2:白
4 1 最终颜色judge1:黑 ----- 最终颜色judge2:黑
4 2 最终颜色judge1:白 ----- 最终颜色judge2:白
4 3 最终颜色judge1:黑 ----- 最终颜色judge2:黑
4 4 最终颜色judge1:白 ----- 最终颜色judge2:白

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值