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 = 10;//老鼠的数目public static void main(String args[]){int water[] = new int[waterNumber];int mouse[] = new int[mouseNumber];int i,j;String s;StringBuffer sb;int flag = 1;Scanner reader = new Scanner(System.in);
//      System.out.println("请输入老鼠的存活情况,1 表示死了,0表示还活着:");for( i=0; i<mouseNumber; i++){System.out.println("请输入第"+i+"老鼠的存活情况(1 表示死了,0表示还活着)");mouse[i] = reader.nextInt();}for( i=0; i<mouseNumber; i++ ){//mouseNumber只老鼠for( j=0; j<waterNumber; j++ ){//1000瓶水s = Long.toBinaryString(j);//将 j 转换为二进制sb = new StringBuffer(s);sb.reverse();//将字符串反转if( sb.length() >= i+1 ){//字符串长度if( mouse[i] == 1 ){//老鼠死了if( sb.charAt(i) == '1'){//第i只老鼠喝了第j瓶水water[j]--;}}else{//老鼠未死if( sb.charAt(i) == '1'){water[j]++;}}}}}int min = 0;for( i=0; i<waterNumber; i++ ){//找出数值最小的waterif( water[i] < min ){min = water[i];flag = i;}}if( min < 0 ){System.out.println("第瓶"+flag+"瓶水有毒!!!");}else{System.out.println("第瓶0瓶水有毒!!!");}}}

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

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

    面试题:1000瓶水其中有一瓶水有毒,有10只老鼠并且只要老鼠喝了有毒的水必死.请问怎样通过一次实验找出有毒的那瓶水. 1.  知识点:二进制. 解题思路:此题考察的是二进制.2的10次方等于1024 ...

  2. 笔试加分题:有16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小时会死。请问最少用() 只小白鼠,在1小时内一定可以找出有毒的水?

    原题: https://www.nowcoder.com/questionTerminal/a09c0eecbf684b0cba2ad0be32b7988e?orderByHotValue=1& ...

  3. (小白鼠喝药问题)1000瓶药水,其中有一瓶是有毒的,如何找出有毒的药水?

    问题描述 有 1000 瓶药水,但是其中有一瓶是有毒的,小白鼠只要喝了任意剂量的药水,24小时内就会死掉!请问,要在24小时内找出有毒的药水,最少需要多少只小白鼠? 解答 至少需要10只. 分析 1. ...

  4. 【智力题】有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的 药物,最少需要多少只小白鼠?

    答案是10只 本题采用了二进制的思想 小白鼠的生与死可以看作二进制的0和1. 用10只小白鼠,也就是10个二进制位,最多可以表示1024个数. 编号环节 先给药水从001到1000编号,每个药水编号转 ...

  5. 15瓶可乐,其中有一瓶过期了,找出有毒的可乐的问题

    有15瓶可乐,其中只有一瓶过期了,小白鼠喝之后两个小时会死. 请问最少用多少只小白鼠,在2小时内一定可以找出有毒的可乐? 答案:2的4次方大于15,故使用4只小白鼠就可以测出来. 解析:15瓶汽水从0 ...

  6. 有10瓶药,每瓶有10粒药,其中有一瓶是变质的。好药每颗重1克,变质的药每颗比好药重0.1克。问怎样用天秤称一次找出变质的那瓶药。

    有10瓶药,每瓶有10粒药,其中有一瓶是变质的.好药每颗重1克,变质的药每颗比好药重0.1克.问怎样用天秤称一次找出变质的那瓶药. 先将这十瓶药由一到十按顺序排好,或在瓶上贴上数字,然后在一号瓶上拿出 ...

  7. 很有趣的一道题:找出有毒的瓶子

    问题描述: 有1000个瓶子,其中有1个装的液体是有毒的,其余的999个装的是无毒的,有10只小白鼠用来测试,请找出装有毒的液体的瓶子. 解法1:二分查找 因为小白鼠测试的结果只有存活与死亡两种结果, ...

  8. 有 1000 瓶药物,但是其中有一瓶是有毒的,老鼠只要服用任意量有毒药水就会在一个星期内死掉!请问,在一个星期后找出有毒的药物,最少需要多少只小白鼠?

    在程序员面试的时候面试官有时会考我们一些计算机编程方面的智力题,这便是一道有趣的智力题,这道题考察了我们对bit位的灵活运用. 首先1000与1024相差无几,于是我们可以用10个bit位来对这100 ...

  9. 1000瓶酒其中1瓶有毒,10只老鼠找出毒酒

    1: 折半查找的方式       容易理解 500瓶每瓶1滴放在一起看老鼠喝了死不死       依次类推 250->125->63->32->16->8->4-& ...

最新文章

  1. 造车新势力“围猎”秋招,应届生如何拿下高薪 offer ?
  2. java图片不动了_JDK 12又来了,我学不动了...
  3. IOTA 交易,确认和共识
  4. 阿里云分布式缓存OCS与DB之间的数据一致性
  5. 清北·NOIP2017济南考前冲刺班 DAY1 morning
  6. 《趋势的力量》-- 观念决定了个人发展的战略路线(大学生选择专业、就业、考研与否的建议)
  7. HTML 基础语言
  8. Spark机器学习(7):KMenas算法
  9. GPU、TPU买起来,新政策让1亿研发费用可多减税375万元
  10. c# mysql datetime 判断为空 dbnull_转:SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究...
  11. java资费管理模块_JAVA小区物业收费管理系统设计与实现.doc
  12. android录制视频设置分辨率,Android录制视频的全面屏适配
  13. Ardunio开发实例-TEMT6000环境光传感器
  14. 微信中H5通过uin_base64链接跳转公众号关注页面,关注按钮闪一下消失?
  15. Scratch软件编程等级考试三级——20200913
  16. 对接微信二维码支付流程
  17. 2021-12-08:扑克牌中的红桃J和梅花Q找不到了,为了利用剩下的牌做游戏,小明设计了新的游戏规则: 1) A,2,3,4....10,J,Q,K分别对应1到13这些数字,大小王对应0; 2) 游
  18. 讲一个历史上真实存在过,数学家们花了好多年才解出来的数学题
  19. 麦肯锡称三年内将会发生金融AI大变革
  20. 【Kotlin 协程】协程中的多路复用技术 ① ( 多路复用技术 | await 协程多路复用 | Channel 通道多路复用 )

热门文章

  1. Xposed工具的安装
  2. C语言基础 龟兔赛跑
  3. 世纪佳缘财务及运营数据分析
  4. ZCMU - 1919: kirito‘s 星爆气流斩
  5. 开始使用 Elasticsearch (1)
  6. 姓谢起名:温柔贤惠、好听到爆的谢姓女孩名字
  7. 微信中H5通过uin_base64链接跳转公众号关注页面,关注按钮闪一下消失?
  8. 电瓶车.20180809
  9. thinkphp手册
  10. excel 文件加密