十只老鼠在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. ...
最新文章
- hive 列转行_掌握这个SQL技巧超越80%的人——行转列/列转行
- Java语言的循环控制结构
- 分布式理论(一) - CAP定理
- 二叉树的前序,中序,后序,层序遍历的递归和非递归实现
- 【Flask项目】sqlalchemy原生sql查询,返回字典形式数据
- 洛谷 - P3391 【模板】文艺平衡树(Splay-区间反转)
- 将递归文件系统遍历转换为流
- 学习 | MongoDB 索引和排序
- php csrf jsonp,读取型CSRF(JSONP劫持、CORS跨域资源读取、Flash跨域劫持)
- 【转】SqlLite .Net 4.0 System.IO.FileLoadException”类型的未经处理的异常出现在XXX
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
- 网易:Flink + Iceberg 数据湖探索与实践
- 房产中介管理系统,房产中介预约看房系统,看房预约系统毕设作品
- bmp图片格式转化为jpg
- opencv-3.0.0-beta和opencv2版本的区别
- 五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(四)算杀模块的简单实现
- 5-29 止跌上涨中,关注明后两天能否创新高点
- 计算机网络(中科大郑烇)第二章笔记
- java-天气预报的接口
- Windows 2008R2 +MDT2013+WDS(1)
热门文章
- SCI论文编辑教你如何准备SCI论文和写作 [转]
- JavaScript面向对象:面向对象案例
- Windows CreateFont:创建自己的字体
- mysql统计一年中每周的数据,week(时间)和week(时间,1)不同
- Unity-业余2D游戏制作笔记02-Dialogue System for Unity使用
- C语言中静态变量的概念和用法
- 2023西北大学计算机考研信息汇总
- word html密码,Word文档加密打不开怎么办?Word解除密码的三种解决办法
- SQL查询语句(从单表到多表、从简单到复杂)
- ZGC都出来了,你还不懂G1?