首页 > 代码库 > 1000桶酒有一桶是毒酒问题

1000桶酒有一桶是毒酒问题

原题:1000桶酒,其中1桶有毒。而一旦吃了,毒性会在1周后发作。问最少需要多少只老鼠可在一周内找出毒酒。

  某日,某大公司某技术问我的一个问题,当时一咯噔,哎。没想出来。他还提示我其实网上到处都有这个很经典的问题,我硬是没想出来呀,怪自己太笨。事后硬是不网上查。来吧,言归正传,谈谈后来我是怎么想的吧:

      首先我会想用到999只老鼠,每只都给他灌点酒,一个礼拜看结果,肯定是能解决问题,问题是我也太残忍了吧,哥做不到啊。

      那怎么办呢?

  我想还是一步一步用列举法吧,看下能不能找着规律呢?试试:

     列完部分之后是不是发现了某些情况呢?嘿嘿。是的,其实我们发现”结论“列都是由老鼠的”生死排列组合“情况来得出来几号酒是有毒的,相信大家一眼就看出来了,这个时候你就完成了大半思路了。

     这个时候我们很容易就联想到可怜的小耗子死和活不就是两种状态吗,结合上面说的:这个不就是和计算机里面的1和0相对应嘛(但凡有点计算机常识的应该都有这种感觉),好啦。这个时候答案已经显而意见了,用小耗子的生死状态来表达完这1000桶可恶的酒,需要多少呢?2^10,即10只可以表达1024桶,那表达1000桶绰绰有余,而2^9,9只肯定表达不完。答案就是:10只小耗子就可以把毒酒甄别出来呢。

     现在哥就开始动手来给老鼠喂酒了,虽然哥于心不忍:

     需要1000中喂法,于是就给酒上号吧:0000000000   0000000001   0000000010 .........1111111111

     第一步:假设第一桶酒是毒酒,第一桶酒就不给这10只老鼠喂了。

     第二步:假设第二桶酒是毒酒,第二桶就给第一只老鼠喂点。

     第三步:假设第三桶酒是毒酒,第三桶就给第二只老鼠喂点

      ....

     第千步:假设第千桶酒是毒酒,给这10只都喂上。

     坐等1周后小耗子的死亡情况:

  比如:

     1周后发现全死了,尼玛惨不忍睹啊。说明最后一桶有毒;

     1周后如果发现死亡情况是:死死活活活活活活死死 = 1100000011桶酒是毒酒,即第770桶酒是毒酒。

 

     原来真很简单,为什么当时那小伙儿问我的时候我没想出来呢?555~~

     这个冬天有点冷,心情也很低落。

     第一次写博客,写了很多啰嗦的话,就当是自己的随笔了。

 

  

      

     

1000桶酒有一桶是毒酒问题