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

原创 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只,是不是很白痴大笑)。


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


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

一个程序员的真实故事上

这是一个真实的故事,关于作为程序员的身体健康问题,目的警示大家一定要注意身体,多锻炼身体,身体是革命的本钱,永远比金钱重要。...
  • zhangdeTalk
  • zhangdeTalk
  • 2016年05月18日 12:08
  • 3219

程序员生存定律-六个程序员的故事(1)

程序员生存定律这系列的目录在这里:程序员生存定律--目录喜欢从头瞄的,可以移步。------------------------------------------------------------...
  • leezy_2000
  • leezy_2000
  • 2014年08月17日 23:34
  • 18320

每个程序员都应该知道的延迟值

L1 cache reference                                               0.5ns 一级缓存引用 Branch mispredict   ...
  • tan6600
  • tan6600
  • 2015年05月22日 09:09
  • 743

程序员如何快速的熟悉一个系统?

程序员在进入一个新的公司或者系统的交接的时候,都需要快速的熟悉一个系统。那么熟悉一个系统怎么快速的掌握,是我们程序员应该掌握的一种技能。CleverCode认为应该分以下几步步走。 1 浅入了解:...
  • CleverCode
  • CleverCode
  • 2017年03月12日 14:48
  • 1306

很有道理的程序员的小故事

转载自:  http://www.cnblogs.com/dyllove98/archive/2012/05/07/2489252.html 说是苦海还有不忍心的,其实我还是非常喜欢IT这个行业...
  • yuelinqiu
  • yuelinqiu
  • 2015年09月29日 19:07
  • 1133

每个程序员都应该学习使用Python或Ruby(选Python)

每个程序员都应该学习使用Python或Ruby 如果你是个学生,你应该会C,C++和Java。还会一些VB,或C#/.NET。多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaS...
  • ajian005
  • ajian005
  • 2012年06月28日 14:07
  • 1517

每个程序员都应该了解的内存知识(3)-虚拟内存

【原文:http://www.cnblogs.com/mikewolf2002/archive/2013/04/13/3018413.html】 英文原帖地址:http://lwn.net/Ar...
  • zhazhiqiang2010
  • zhazhiqiang2010
  • 2014年02月28日 21:46
  • 1369

每个程序员都应该了解的内存知识1——内存概述

英文原文:https://lwn.net/Articles/250967/ 1、概述 早期的计算机很简单,它的各种组件如CPU、内存、大容量存储和网络接口都是一起开发的,所以性能差不多。举个...
  • ivy_reny
  • ivy_reny
  • 2017年03月23日 09:35
  • 697

程序员和产品经理的故事

摘要:韩寒在《长安乱》里说:佛是你打死我你就超度了我,而道是你打不死我我就超度了你。小编坐在办公室的角落里,看着公司的PM和程序员恨不得分分钟拿刀砍了对方,还要在一起改需求,就开始为他们的潜在信仰归属...
  • Jeebokey
  • Jeebokey
  • 2014年08月14日 14:08
  • 955

哪本最具影响力的书,是每个程序员都应该读的?

对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》。 不管你做什么事,总是要力求完美,...
  • universsky2015
  • universsky2015
  • 2017年09月13日 14:36
  • 276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个程序员都应该熟悉的故事
举报原因:
原因补充:

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