1000桶酒中寻找一桶毒酒算法

题目:

有1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。现在我们用小老鼠做实验,要在1周后找出那桶毒酒,问最少需要多少老鼠,如何检测(老鼠的使用量越少越好,注意,毒性1周后才会发作,而且一周后必须出结果,所以时间紧迫)

思路:

为何需要老鼠做实验,显然是根据老鼠的死活来判断酒的毒性,每一只老鼠只有2种状态,死和活,n只老鼠就是这n个死或活的状态,应该由此敏感的联想到二进制,隐约去感知1000这个数量与n的关系,2^n能表示多少的信息量呢?2^10=1024,想到这里我们可以试着去用10个老鼠去做一下实验。

步骤:

把1000桶酒分别以10位二进制数标号,从0000000001至1111101000,从这1000个二进制数中寻找毒酒,毒酒也一定是0和1的某种组合,所以问题转化为如何得出这个组合的每一位都是多少,我们先思考如何得出第一位(从右到左)是0还是1,结论是只要把所有第一位是1的酒给一只老鼠喝,如果这只老鼠最终死了,可知毒酒的第一位一定是1,如果这只老鼠还活着,可知毒酒第一位一定是0.依次类推,我们使用10只老鼠便可判断毒酒的每一位是多少。从而得到毒酒的二进制数,转化成10进制便只是第几桶。

转载自:http://site.douban.com/196781/widget/forum/12602268/discussion/51922413/

时间: 2024-08-29 14:16:23

1000桶酒中寻找一桶毒酒算法的相关文章

Word Search, 在矩阵中寻找字符串,回溯算法

问题描述: Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not

1000桶酒有一桶是毒酒问题

原题:1000桶酒,其中1桶有毒.而一旦吃了,毒性会在1周后发作.问最少需要多少只老鼠可在一周内找出毒酒. 某日,某大公司某技术问我的一个问题,当时一咯噔,哎.没想出来.他还提示我其实网上到处都有这个很经典的问题,我硬是没想出来呀,怪自己太笨.事后硬是不网上查.来吧,言归正传,谈谈后来我是怎么想的吧: 首先我会想用到999只老鼠,每只都给他灌点酒,一个礼拜看结果,肯定是能解决问题,问题是我也太残忍了吧,哥做不到啊. 那怎么办呢? 我想还是一步一步用列举法吧,看下能不能找着规律呢?试试: 列完部分

Hive中的分桶

对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中. 把表(或者分区)组织成桶(Bucket)有两个理由: (1)获得更高的查询处理效率.桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构.具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现.比

10G整数文件中寻找中位数或者第K大数

来源:http://hxraid.iteye.com/blog/649831 题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). 分析: 既然要找中位数,很简单就是排序的想法.那么基于字节的桶排序是一个可行的方法 (请见<桶排序 >): 思想:将整形的每1byte作为一个关键字,也就是说一个整形可以拆成4个keys,而且最高位的keys越大,整数越

Google”在垃圾中寻找黄金“——Page-Rank

GOOGLE"在垃圾中寻找黄金"--Page Rank GOOGLE"在垃圾中寻找黄金"--Page Rank 1.Google的低成本之道 ○不使用超级计算机,不使用存储(淘宝的去i,去e,去o之路) ○大量使用普通的PC服务器(去掉机箱,外设,硬盘),提供有冗余的集群服务 ○全世界多个数据中心,有些附带发电厂 ○运营商向Google倒付费 2.Google面对的数据和计算难题 大量的网页如何存储? Google的爬虫每天在全世界各个服务器里面爬到的很多网页,这些

坚持努力,在黑暗中寻找光明——我的2014

此文不为参赛,算是对自己的一个总结.开始本来不想总结了,因为从小我就不会写作文,晚上上来逛逛,看到身边的朋友也写了,自己也总结一下吧,算是对自己一年来的收尾. 在黑暗中寻找光明,这个题目是我对于今年的第一感触.为什么说是黑暗呢,倒不是说自己所处的环境多么恶劣什么的,而是能够更加深刻地重新认识自己一次,认识自己之后就会猛然有这样一种想法:你之前都在做什么? 科班毕业的我也也已经离开校园5个年头之久了,虽然重点院校毕业,但并没有好好把握大学的时光用来学习,真正入门还是要从大四的外企实习开始,真是人不

程序开发--在现实生活中寻找可利用的资源

经历了很多次软件开发之后,每个程序员是否都会体验到程序与我们的生活.工作密切相关.每次的程序要么应用到生活的某个娱乐.助理以及工作的各种场合,在进行开发之前,总会围绕着用它干什么,能给我带来什么效益开端. 那么,生命即将开始. 前期的规划是整个生命的重中之重,没有一个完美的应用采集,分析,架构,程序生命期会严重受到影响.甚至开始没用之前就已经奄奄一息了,围绕着实用性,效益性,安全性展开合理的生命旅程吧 ! 于是,生命已经开始了 . 设计完成之后,理论性分析完毕了,完全进入到一个问题性阶段.这个阶

在DataList、Repeater的HeaderTemplate和FooterTemplate模板中寻找控件FindControl

[程序代码] <asp:Repeater ID="Repeater1" runat="server"> <HeaderTemplate> <asp:Label ID="Label1" runat="server" Text="AAAAAAA"></asp:Label> </HeaderTemplate> <ItemTemplate> &

矩形网格中寻找最长递增序列

在矩形网格中寻找最长的递增序列 比如如下网格 97,47,56,36 35,57,41,13 89,36,98,75 25,45,26,17 结果要求输出 17, 26, 36, 41, 47, 56, 57, 97 基本想法就是对图中的每一个点都当作起始点试一编 将序列最长的保存起来 最后输出 代码如下 使用java编写 import java.util.ArrayList; public class 最长递增序列 { static int[][] rect={ {97,47,56,36},