1000瓶水其中有一瓶水有毒,有10只老鼠并且只要老鼠喝了有毒的水必死。请问怎样通过一次实验找出有毒的那瓶水。

通过一次实验找出1000瓶水中唯一有毒的一瓶,利用10只老鼠和二进制原理,将水与老鼠编号对应,根据老鼠死亡情况判断有毒水瓶的位置。
摘要由CSDN通过智能技术生成

1000瓶水其中有一瓶水有毒,有10只老鼠并且只要老鼠喝了有毒的水必死。请问怎样通过一次实验找出有毒的那瓶水。

. 这道题知识点:二进制。
解题思路:2的10次方等于1024,1024以内的所有自然数都可以用10个数位的二进制数表示出来。1000 <= 1024,此题可解。

第一步:将1000瓶水从water[0]到water[999]分别进行编号,并转化成10个数位的二进制数表示如下:  

在这里插入图片描述

第二步:将10只老鼠从mouse[0]到mouse[9]进行编号

0.让第mouse[0]只老鼠喝第0位为1的所有的水

1.让第mouse[1]只老鼠喝第1位为1的所有的水

2.让第mouse[2]只老鼠喝第2位为1的所有的水

.

.

.

8.让第mouse[8]只老鼠喝第8位为1的所有的水

9.让第mouse[9]只老鼠喝第9位为1的所有的水

这样就保证了(除了第0瓶水外)每一瓶水都有老鼠喝了。

第三步:根据老鼠的存活情况判定有毒水方法  

if(如果第i只老鼠死了) 则让 water[第i位1的水的编号]的值-1.

else 则让 water[第i位1的水的编号]的值+1.

然后找出wanrer[0]--water[999] 中 的最小数water[i],  

if(water[i] <0) 即为 第 i 瓶水有毒 else 为第0瓶水有毒。

原因:因为water[0]--water[999]的初始值都为0,如果第i只老鼠死了,说明第mouse[i]只老鼠喝的水中必有一瓶有毒,所以令 water[第i位1的水的编号]的值各-1.如果第i只老鼠没有死,说明第mouse[i]只老鼠喝的水都没有毒,所以令 water[第i位1的水的编号]的值各+1。

import java.util.Arrays;
import java.lang.StringBuilder;
import java.util.Scanner;
 
public class toxicWater {
   
	public static final int waterNumber = 1000;//水的数目
	public static final int mouseNumber = 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值