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~~

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

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

 

  

      

     

转载于:https://www.cnblogs.com/wuruize/p/4103295.html

.版本 2 .如果真 (ItemID = 3020193) item.Name = “[魂玉]过关斩将” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020185) item.Name = “[魂玉]七星夺窍” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020188) item.Name = “[魂玉]五情七灭阵” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020187) item.Name = “[魂玉]捅劲” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020183) item.Name = “[魂玉]乾坤日月斩” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020179) item.Name = “[魂玉]分水斩” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020181) item.Name = “[魂玉]铁马残红” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020180) item.Name = “[魂玉]夺魂·双刀” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020173) item.Name = “[魂玉]强袭·离火式” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020182) item.Name = “[魂玉]易武·万华” item.Color = Color_4 返回 (item) .如果真结束 .如果真 (ItemID = 3020174) item.Name = “[魂玉]五毒酒” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3020163) item.Name = “[魂玉]流星飞坠” item.Color = Color_3 返回 (item) .如果真结束 .如果真 (ItemID = 3005005) item.Name = “[装备]红甲” item.Color = #红色 返回 (item) .如果真结束 .如果真 (ItemID = 3010053) item.Name = “[道具]锻造锤” item.Color = Color_4 返回 (item)翻译成c++ if源码
05-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值