十只老鼠在1000瓶药水中找一瓶有毒的
/*** 十只老鼠试验一千瓶药水,只有一瓶有毒,怎么找出有毒的那瓶?** 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瓶药水中找一瓶有毒的相关推荐
- 十只老鼠和一千瓶毒药的故事
十只老鼠和一千瓶毒药的故事 问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药. 任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只小白鼠和1个星期的时间,如何检验出哪 ...
- 1000瓶药水,只有一瓶是有毒的,如何使用最少的小白鼠测出那瓶是毒药?
面试题如下:有1000瓶药水,只有一瓶是有毒的,小白鼠喝了就会身亡,但是需要一天的时间才会有结果,而且你只有一天时间去判断,问题是,如何使用最少的小白鼠,试验出哪瓶是毒药? 答: 转换成二进制,最少需 ...
- 10只小白鼠1000支药水找出毒药问题
偶然间看到了这道题:10只小白鼠,1000支药水有且仅有一支是毒药,毒药发作时间是两个小时,忽略小白鼠喝药水的时间以及其他影响因素,每支药水足够多,问:如何利用这10只小白鼠在两个小时内找到那支毒药? ...
- 10只老鼠与1000瓶药水
题目:1000 瓶无色无味的药水,其中有一瓶毒药,10只小白鼠拿过来做实验.喝了无毒的药水第二天没事儿,喝了有毒的药水后第二天会死亡.如何在一天之内(第二天)找出这瓶有毒的药水? 思路:10只小白鼠, ...
- 1000瓶药中找出一瓶毒药,10只老鼠做试验
题目如下:现有1000瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有10只老鼠和1个小时的时间,请问怎么找出毒药? 题解:这道题明显就是只能一开始就把所有药都喂给10只老鼠,1小时后就直接 ...
- D28 1000瓶药中找出一瓶毒药,10只老鼠做试验
题目:现有1000瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有10只老鼠和1个小时的时间,请问怎么找出毒药? 解题: 这道题明显就是只能一开始就把所有药都喂给10只老鼠,1小时后就直接一 ...
- 十只老鼠和一千瓶毒药的故事。。。
问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药. 任何喝下毒药的生命都会在一星期之后死亡.现在你只有10只小白鼠和1个星期的时间,如何检验出哪个瓶子有毒药? 解答: 根据 ...
- 毒酒问题---1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒
如题. 本题考查的是二进制编码问题. 如对1000桶按1~1000编码,需要10位二进制数. 因此只需要取10只老鼠,每只老鼠只喝其对应位数为1的编号的酒. 即10只老鼠按以下编码: 第一只 0000 ...
- (小白鼠喝药问题)1000瓶药水,其中有一瓶是有毒的,如何找出有毒的药水?
问题描述 有 1000 瓶药水,但是其中有一瓶是有毒的,小白鼠只要喝了任意剂量的药水,24小时内就会死掉!请问,要在24小时内找出有毒的药水,最少需要多少只小白鼠? 解答 至少需要10只. 分析 1. ...
最新文章
- sleep和wait到底什么区别
- 作业调度框架 Quartz 学习笔记(三) -- Cron表达式
- shell编程之特殊变量
- Psych101(part7)--Day7
- Spring查找方法示例
- Spring Boot————Spring Data JPA简介
- python中下划线开头的命名_Python标识符规则 行与缩进 注释
- Nmap的高级扫描(脚本)
- linux文件操作命令介绍(一)
- 如何使用更多数据更新神经网络模型
- 如何联合R与Hadoop更好处理大数据!
- 细雨闲花-2007经典高考作文(绝对经典)
- 不是吧?DNSPod挪车码免费送?
- python psutil模块 硬盘厂家芯片型号_python第三方模块—psutil模块
- Linux 系统时间 EST 改 CTS
- CSS小技巧之替换图片(content)
- 关于 Spring AOP (AspectJ) 你该知晓的一切
- 基于angularjs的单页面实例_基于AngularJs的单页面程序
- P6专题:Oracle P6 数据库管理(SQLite/单机版数据库)
- NRSMiner更新版本攻击中国在内的亚洲国家