对于此问题,一个思路是通过对问题分解:

首先一个猪在一个小时内的状态可以分为5种:

一.0分钟喝水,15分钟死去

二.15分钟活着再喝水,30分钟死去

三.30分钟活着再喝水,45分钟死去

四.45分钟活着再喝水,60分钟死去

五.60分钟还活着

对比于一个猪有5个状态,可以考虑状态机以及计算机二进制思想:

一个猪一个小时可以表示5个不同桶,两头猪可以表示5*5=25个不同的桶……

根据题目总共1000个桶:至少需要多少头猪的话?

根据几个猪可以表达1000这个完整的数的状态:

=3125>1000

所以至少5个猪可以实现这1000头猪的数值范围覆盖。

如果只关心多少个猪的话只看前面就好了,如果感兴趣具体实现的一种方法的话可以参考下面的阅读。

这是在思想的实现,是5头猪可以实现,但对于实际操作的理解该如何操作那?

把5头猪按照5进制的数据的排列5号,4号,3号,2号,1号(每个位可以有0,1,2,3,4状态值,只是对于值为0 的位,任何权值相乘都为0,对于实际的计算出那头猪没意义),把1000个桶按照5进制编号如01111=1+5+25+125=156,04444=624等

根据此编码可以实现1-1000个桶的编码,然后在前15分钟内,

可以分别让1号猪喝1号位为1的桶:00001,00011,00021,00031,00041,00101,00111……等等,

总共1+4+4*5+4*(1+4+4*5)+1*125=250个(在第五位只能取0和1,大于1之后已经超过1000的总桶数)

二号猪喝2号位为1的桶:00010,00011,00012,00013,00014等,类比一号猪,总共是250个个桶

三号猪喝00100,00101,00102,00103,00104等,类比以上,可得共250个桶

四号猪喝01000,01014,00024,00034,00044等,总共250个桶

五号猪只喝10000,10001,10002,10003,10004等,总共的桶数为625桶

总共喝过1625桶水,因为这里面猪喝的桶数是有重叠的,如1号和2号猪都喝过00011即3号桶,但其实前15分钟并不是所有的桶都喝过,如)02222,03333等,前15分钟可以根据5头猪的情况具体情况死还是活来判断,若只有2号猪死亡,因为只有一桶水有毒多以说明有毒的水在2号位编号为1的水桶中,因此2号猪未喝过的水可以排除(若M桶水中有N桶水都有毒,该问题就变的不一样,该问题提供大家思考解答),其他4个还活着的猪会继续喝水试毒,30分钟时,情况和15分钟时情况类似,一直到1个小时之后的情况。

第15分钟到30分钟,分别重复前15分钟的过程,活着的猪分别喝对应的位置号码为2的桶水,情况类似,但5号猪,其实已经不用再喝水了,因为第5位为2已经超过1000个桶了,所以5号猪目前休息,其实在实际动态分析的过程中,可以考虑如果5号位没有死亡的话,把他进行对剩下的未被喝过的水重新分配给这剩下的猪进行检验。不过对于该问题,静态分析就按照前面对应位喝对应位值为1的水。

重复此过程直到60分钟,根据5头猪在5个不同时间段的状态值(死,活)可以最终计算出有毒的水桶。如下图:

               猪的位号
猪的状态
1 2 3 4 5
         
1     1  
  1      
    1  
        1 

该表中的,猪的位号代表编号1,2 3,4,5的5头猪,状态的一二三四五代表其最终的状态表,每个猪的状态只能是一二三四五中的一个且必须有一个,如表中 的猪状态用1表示,如果为该结果可以分析:1号猪检测出尾码为2的水中有一个有毒,2号猪检测第二位3号有一个有毒,依次可得有毒的水为:02432,5进制转换为十进制:2+3*5+4*25+2*125+0*625=367号,即367号桶是毒水。

同时可以参考信息熵的思路:1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪? - 知乎
https://www.zhihu.com/question/60227816/answer/1274071217

update:看到有提问得问题里有问到为何不用位状态为0 的状态让猪去检测?

这个问题,打算言简意赅的解释下,如果是5进制,必然是0.1,2,3,4.前面介绍时主要使用的分别是检查位数数值为1,2,3,4的桶,实际上如果泛化的操作的话,可以任意选择0,1,2,3,4中任意4个数字为检测位来检测,如0,1,3,4或0,2,3,4等,这些都是可以的,这种想法对于计算机编程上变换也很简单,各种方法结果殊途同归。4个位数的值都检测过之后,必然可以得到另一个数值为的状态,如对应前面1234四个数值检测的126(01001)的检测结果对应的检测表格结果应该是:

               猪的位号
猪的状态
1 2 3 4 5
 1     1   
     
       
     
   1  1   1 

因为2,3号猪最终还活着,证明该位数值为1,2,3,4都不在有毒的范围内,所以该位的只能是0的值的桶。

总结:该方法主要是首先如何全面覆盖1000个桶的范围,如何具体实现的方法有很多,该答案只是其中一种方法,该种方法还可以变换,最后只要无遗漏的检查出来,即实现目的。

1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪?具体该如何实现方法讲解相关推荐

  1. 关于1000桶水,其中一桶有毒,猪喝毒水后会在15分钟内死去,想用一个小时找到这桶毒水,至少需要几头猪?的问题

    这是个概率学问题,在计算机中也是个进制问题,我看了网上一些关于这个问题的解答,感觉有的人说的并不清楚,或者感觉有的写解答的人自己都没太搞清楚,回答也不对,只是因为知道答案是5硬往上套.这个问题,首先判 ...

  2. 有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水。它们从外观看起来都一样。如果小猪喝了毒药,它会在15分钟内死去。

    有1000只水桶,其中有且只有一桶装的含有毒药,其余装的都是水.它们从外观看起来都一样.如果小猪喝了毒药,它会在15分钟内死去. 问题来了,如果需要你在一小时内,弄清楚哪只水桶含有毒药,你最少需要多少 ...

  3. 有 3 只老鼠,8 瓶水,其中一瓶有毒,喝到有毒的水之后,老鼠一周后会准时死亡。...

    题目 有 3 只老鼠,8 瓶药,其中一瓶有毒,喝到有毒的药之后,老鼠一周后会准时死亡.按照要求,写个算法,如何在一周内找出哪瓶有毒.(以程序语言实现,语言不限.) 基本思路 给瓶子编号 0-7,并把编 ...

  4. linux的python2.7的paramiko_Python使用paramiko操作linux的方法讲解

    paramiko介绍 paramiko是一个基于python编写的.使用ssh协议的模块,跟xshell和xftp功能类似,支持加密与认证,可以上传下载和访问服务器的文件. 可以利用paramiko模 ...

  5. 微信小程序之15分钟倒计时(附带天数和时钟的实现方法在文章中)

    这是制作的订单支付前倒计时,如果客户在规定时间内没能 支付,则系统自动删除,这样就以便有些商品冗余,当然了,这里只有分钟和秒钟,天数和时钟我写在了最底下,最后代码的显示第七行,可以看一下,然后带入到相 ...

  6. 算法,16瓶水,有一瓶有毒,假设一只小白鼠喝一滴水,一个小时后会死亡,一个小时找出那瓶有毒的水至少需要几只小白鼠?

    首先16瓶水,编号0000,0001-1110,1111.然后让第一只小白鼠喝最低位为1的水,第二只小白鼠喝次最低位为1的水,第三只小白鼠喝第三位为1的水,第四只小白鼠喝最高位为1的水.一个小时后看小 ...

  7. 单片机电路元件以及读数方法讲解((贴片)电阻,电容,二极管,蜂鸣器等)

    单片机电路元件以及读数方法讲解((贴片)电阻,电容,二极管,蜂鸣器等) ***1. 电阻和贴片电阻读数 2. 电容 3. 二极管读数计算及其他元件 ** 前言:** 在讲解电路之前,相信大家一定已经人 ...

  8. “如果你有1000万头猪,你打算怎么管?”——特驱集团数据化养猪

    引言 "如果你要养1000万头猪,你打算怎么管?"来自四川特驱集团的CIO张海峰提出了这样一个有趣的问题.也许你的答案是,要建立规模庞大的现代化养猪场,招很多很多的养猪工人.如果你 ...

  9. python列表方法语句_Python中列表和元组的相关语句和方法讲解

    列表(list): 首先,列表属于序列,那么序列类型可用如下内建函数-- list(iter):把可迭代对象转换为列表. str(obj):把obj对象转换为字符串,即用字符串来表示这个对象. tup ...

最新文章

  1. Confluence 6 如何配置快速导航的同时查找数量
  2. SVM原理详细图文教程来了!一行代码自动选择核函数
  3. vba 日期加一年_VBA究竟值不值得审计学?
  4. 简述力法计算弹性固定无铰拱的原理_《隧道结构体系设计》PPT课件.ppt
  5. Hystrix仪表盘解释
  6. plsql编程语言定义变量
  7. python3 32位_Python 3.6.8软件安装教程
  8. 理解 OpenStack 高可用(HA) (6): MySQL HA
  9. 信息学奥赛C++语言:5个人分糖块
  10. centOS目录结构
  11. 华为AI音箱更新春节专属技能:对春联 拜年留言
  12. 数组任意取三个数中乘积最大值
  13. [Java] 蓝桥杯BASIC-15 基础练习 字符串对比
  14. iOS开发之抽屉效果
  15. Vue在HTML模板中插入JS数据
  16. 拨码开关控制数码管的数字显示_VHDL编程
  17. 计算某日是该年的第几天
  18. 拓端tecdat|R语言进行相关矩阵分析及其网络可视化
  19. IE地址栏可输入的最大字符数
  20. cnn图像风格转换原理论文整理(一)

热门文章

  1. 九度OJ-1163:素数(未关联)
  2. C罗轮播图(HTML+CSS+JS)
  3. Cannot enable Hyper-V service
  4. 百度与谷歌排名规则算法的大致区别
  5. python毕业设计 基于django框架个人博客系统毕业设计设计与实现
  6. Tableau中国地图
  7. 《机器学习方法(第三版)—— 李航》学习笔记(一)附代码
  8. Security:在 SIEM 上运用 Elastic Security
  9. [go]Go语言编译器的 “//go:“ 详解
  10. 诺基亚Lumia630开始预订