一个程序员都应该熟悉的故事

原创 2015年11月18日 12:40:07

首先读者必须原谅作者把有意思的题目看做故事。。。。。害羞

有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,有一瓶是毒药。任何喝下毒药的生物都会在一星期之后死亡。现在,你只有 10 只小白鼠和一星期的时间,如何检验出哪个瓶子里有毒药?

上面的题目熟悉的读者应该不太少,网上分析的也有,但是鉴于作者接触的第一个C语言问题就是他,而作者所接触的第一个技术领域就是C语言,所以以这个故事开始还是颇有意义的,好,让我们正式开始。

首先,我想问读者,这里小白鼠的数量是随便给的吗?恩,我听到了,当然不是!我们可以简单算一下,便知道1000转换为二进制为1111101000(十位)。我们如果对每一个瓶子都按二进制进行编码,可知顺序为0000000001-1111101000,然后我们再让小白鼠排成一行,共十排(见下图),我们这样规定如果哪个瓶子哪个位为1,就让对应排的小白鼠喝它。比如第1000瓶为1111101000那就让第1,2,3,4,5,7排的老鼠去喝它,第888瓶为1101111000那就让第1,24,5,6,7排的老鼠去喝它。我们让这样的操作对1000个瓶子都做一遍。


然后,就等咯。。。

一星期以后,可怜的小白鼠就开始死亡了,我们可以从他的死亡行数,比如第2,5,6,7,8行小白鼠死了,我们可以知道一定是第79号瓶子害的(第一次看的话,需要想一会才能理解原因,想想他们的对应性,而且这种对应性绝不会重复生气)。


我们可以从中得到些什么启发呢?首先小白鼠很可怜,然后就是二进制的魅力咯,还记得作者刚开始接触计算机领域时,就曾经怨恨过,计算机采用二进制编码的复杂性,但是随着学习的深入,才逐渐发现先人的智慧,的确大有可取之处。在这题中我们可以知道虽然瓶子的数量较多,有1000个,然而把他们用二进制排列,只需要十位就可以不重复了,想来也是一件十分神奇的事情(如果题目没有给出小白鼠的数目,只提到要用最少的小白鼠数目,找出带毒瓶,你会想到需要多少小白鼠呢,作者当年想到的是999只,是不是很白痴大笑)。


注:以上内容,纯属作者所想,如有雷同,纯属致敬,若广大读者有更好的表述看法或发现了文章内的错误,敬请指教微笑


版权声明:本文为博主原创文章,未经博主允许不得转载。

每一个有理想的程序员都应该读的一本书 -《rework》

转载 http://kb.cnblogs.com/page/122352/ 每一个有理想的程序员都应该读的一本书 -《rework》 作者: meng-meng(萌萌)  来源: 博客园  发...
  • cai5
  • cai5
  • 2012年03月30日 15:33
  • 420

(转)每一个有理想的程序员都应该读的一本书 -《rework》

每一个程序员都有改变世界的梦想,他们不甘平凡,他们想要make a difference,他们想要创立世界上最cool的公司,那具体该如何做呢?风靡全球的《rework》将告诉你答案。     3...

每一个做JAVA开发的程序员都应该知道的JAVA发展史

作为一名Java语言的学习者,对Java的起源和发展有个大概的了解应是必要的。 小编给大家讲个有趣的小故事,JAVA名字的来源,有两种版本,其中一种可信度虽然不高,但仍有人声称是开发人员名字的组合:...

每一个认真的程序员都应该读的10本经典书籍

 书是知识和智慧的源泉,但是在今天已经很少有人读书了。程序员读书的情况更是少之又少,相反在更多的情况下我们是依赖网络去寻找答案。 科技正高速的向前发展,这个速度超过了人类历史上的任何时期,每隔...

每一个有理想的程序员都应该读的一本书《rework》

每一个程序员都有改变世界的梦想,他们不甘平凡,他们想要make a difference,他们想要创立世界上最cool的公司,那具体该如何做呢?风靡全球的《rework》将告诉你答案 37signa...

每一个Javascript程序员都应该了解的浮点知识

在Javascript开发人员的职业生涯中会碰到一些奇怪的错误——似乎基本的数学运算行不通。在这样或那样的时候,有人会告诉你实际上Javascript中的数字就是浮点。任何人试图去理解浮点或要搞清楚它...
  • dc8899
  • dc8899
  • 2014年02月27日 16:10
  • 693

每一个有理想的程序员都应该读的一本书 -《rework》

每一个程序员都有改变世界的梦想,他们不甘平凡,他们想要make a difference,他们想要创立世界上最cool的公司,那具体该如何做呢?风靡全球的《rework》将告诉你答案。   ...
  • wuwo333
  • wuwo333
  • 2012年02月28日 14:09
  • 857

每一个有理想的程序员都应该读的一本书-《rework》

每一个程序员都有改变世界的梦想,他们不甘平凡,他们想要make a difference,他们想要创立世界上最cool的公司,那具体该如何做呢?风靡全球的《rework》将告诉你答案 37sig...

每个程序员都应该知道的福利

  • 2012年03月16日 18:17
  • 45KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个程序员都应该熟悉的故事
举报原因:
原因补充:

(最多只允许输入30个字)