/*** 十只老鼠试验一千瓶药水,只有一瓶有毒,怎么找出有毒的那瓶?** 1000,转为二进制为11 1110 1000,共十位,每只老鼠各对应一位,* 比如3的二进制为0011,第1、2上为1,就让第1、2只老鼠都喝编号为3的药水,*     8的二进制为1000,第4位上为1,就让第4只老鼠喝编号为8的药水 ...*     15的二进制为1111,1到4位都为1,就让第1、2、3、4只老鼠都喝编号为15的药水*     1000的二进制为11 1110 1000,就是第4、6、7、8、9、10只老鼠老要喝编号为1000的药水* 每瓶药水都试完后,通过老鼠有没有喝药水就可以把1到1000所有的数字表示出来** 喝了,则这只老鼠所在位上就为1,没喝就为0** 像上面示例中,第15瓶药水有毒则第1、2、3、4只老鼠中毒,*              第8瓶药水有毒则只有第4只老鼠中毒,*              第3瓶药水有毒则第1、2只老鼠中毒*/public static void main(String[] args) {//给每只老鼠编号,且各自对应一个集合Map<Integer, List<String>> mouseMap = new HashMap<>();for (int i = 1; i <= 10; i++) {mouseMap.put(i,Lists.newArrayList());}//把药水进行编号,并转为二进制,二进制最多十位,// 第一只老鼠对应二进制的第一位,第二只对应第二位.........第十只对应第十位// 药水编号的二进制哪一位上有1,就让那一位上对应的老鼠喝掉这个编号的药水//比如,1101,第一、三、四位上为1,那1、3、4号老鼠就要喝这瓶药水for (int i = 1; i <= 1000; i++) {String s = Integer.toBinaryString(i);for (int j = 1; j < 11; j++) {List<String> list = mouseMap.get(j);if(s.length() >= j && s.charAt(s.length() - j) == '1'){list.add(s);}}}//把有毒的药水编号转为二进制,那么这个二进制上哪一位上为1的对应编号的老鼠就会死掉//如果第43瓶,转为二进制为10 1011,则第一、二、四、六只老鼠会中毒// 最后执行结果为mouse1、mouse2、mouse4、mouse6String s = Integer.toBinaryString(43);for (int j = 1; j < 11; j++) {List<String> list = mouseMap.get(j);if(list.contains(s)){System.out.println("mouse"+j);}}}

十只老鼠在1000瓶药水中找一瓶有毒的相关推荐

  1. 十只老鼠和一千瓶毒药的故事

    十只老鼠和一千瓶毒药的故事 问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药. 任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只小白鼠和1个星期的时间,如何检验出哪 ...

  2. 1000瓶药水,只有一瓶是有毒的,如何使用最少的小白鼠测出那瓶是毒药?

    面试题如下:有1000瓶药水,只有一瓶是有毒的,小白鼠喝了就会身亡,但是需要一天的时间才会有结果,而且你只有一天时间去判断,问题是,如何使用最少的小白鼠,试验出哪瓶是毒药? 答: 转换成二进制,最少需 ...

  3. 10只小白鼠1000支药水找出毒药问题

    偶然间看到了这道题:10只小白鼠,1000支药水有且仅有一支是毒药,毒药发作时间是两个小时,忽略小白鼠喝药水的时间以及其他影响因素,每支药水足够多,问:如何利用这10只小白鼠在两个小时内找到那支毒药? ...

  4. 10只老鼠与1000瓶药水

    题目:1000 瓶无色无味的药水,其中有一瓶毒药,10只小白鼠拿过来做实验.喝了无毒的药水第二天没事儿,喝了有毒的药水后第二天会死亡.如何在一天之内(第二天)找出这瓶有毒的药水? 思路:10只小白鼠, ...

  5. 1000瓶药中找出一瓶毒药,10只老鼠做试验

    题目如下:现有1000瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有10只老鼠和1个小时的时间,请问怎么找出毒药? 题解:这道题明显就是只能一开始就把所有药都喂给10只老鼠,1小时后就直接 ...

  6. D28 1000瓶药中找出一瓶毒药,10只老鼠做试验

    题目:现有1000瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有10只老鼠和1个小时的时间,请问怎么找出毒药? 解题: 这道题明显就是只能一开始就把所有药都喂给10只老鼠,1小时后就直接一 ...

  7. 十只老鼠和一千瓶毒药的故事。。。

    问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药. 任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药? 解答: 根据 ...

  8. 毒酒问题---1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒

    如题. 本题考查的是二进制编码问题. 如对1000桶按1~1000编码,需要10位二进制数. 因此只需要取10只老鼠,每只老鼠只喝其对应位数为1的编号的酒. 即10只老鼠按以下编码: 第一只 0000 ...

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

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

最新文章

  1. sleep和wait到底什么区别
  2. 作业调度框架 Quartz 学习笔记(三) -- Cron表达式
  3. shell编程之特殊变量
  4. Psych101(part7)--Day7
  5. Spring查找方法示例
  6. Spring Boot————Spring Data JPA简介
  7. python中下划线开头的命名_Python标识符规则 行与缩进 注释
  8. Nmap的高级扫描(脚本)
  9. linux文件操作命令介绍(一)
  10. 如何使用更多数据更新神经网络模型
  11. 如何联合R与Hadoop更好处理大数据!
  12. 细雨闲花-2007经典高考作文(绝对经典)
  13. 不是吧?DNSPod挪车码免费送?
  14. python psutil模块 硬盘厂家芯片型号_python第三方模块—psutil模块
  15. Linux 系统时间 EST 改 CTS
  16. CSS小技巧之替换图片(content)
  17. 关于 Spring AOP (AspectJ) 你该知晓的一切
  18. 基于angularjs的单页面实例_基于AngularJs的单页面程序
  19. P6专题:Oracle P6 数据库管理(SQLite/单机版数据库)
  20. NRSMiner更新版本攻击中国在内的亚洲国家

热门文章

  1. iOS开发--开源库
  2. 第三方资源下载路径集合
  3. connect by prior
  4. ant-design更换主题颜色
  5. 3-3存储系统-高速缓冲存储器Cache
  6. 设置 app 不能在模拟器上运行
  7. (MATLAB代码分享,可运行)基于改进遗传算法的柔性作业车间调度优化研究
  8. 【Java虚拟机】第一章、Java虚拟机是如何产生的
  9. MapX和MapXtreme区别
  10. 使用java对文件夹中文件后缀进行修改