智力题可怜的小白鼠又被下药了(*^@^*)o,你能找到那瓶毒药吗?
Posted 快乐的星球
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智力题可怜的小白鼠又被下药了(*^@^*)o,你能找到那瓶毒药吗?相关的知识,希望对你有一定的参考价值。
✨前言✨:
编程是一个脑力活,适当的做一些智力题可以锻炼脑子,本专栏收录了一些既有趣味性又可以锻炼脑子的智力题,还望大家在闲暇之余可以锻炼锻炼脑子,增强自己编程内功。如果对大家有帮助,别忘了三连支持哟!
目录
✨题目✨
有 1000 瓶药物,但是其中有一瓶是有毒的,小白鼠吃了一个星期以后就会死掉!请问,在一个星期内找出有毒的药物,最少需要多少只小白鼠?
✨思路分析✨
💡这题乍一看有两个难点:
1:用什么方式给药物进行编号?
2:小白鼠死后,怎样把小白鼠的死讯转化为药物的编号?
现在我们先分析第一个难点:
如何给药物进行编号?
🔑因为药物有1000瓶之多,用一个个变量储存编号不现实,而创建一个数组空间又太浪费。
在这时我们就应该换一种思路,用二进制序列进行存储,因为 2^10=1024 大于1000,所以只需要10个比特位的空间大小就能给1000瓶药进行编号。
🔑 图示:
如何将死讯转化为药物的编号?
🔑为了找到那瓶毒药,我们为方便表示出那瓶毒药,对所有药都进行了编号。在那1000瓶药中有且仅有一瓶毒药,如果想找出毒药,唯一的方法是让小白鼠把1000瓶药全部喝一遍(因为喝到毒药后一星期后才会毒发),在一星期后得知小白鼠死讯后,通过死讯找到毒药的二进制序列,进而得到毒药的十进制编号。所以一切的问题都转变为如何通过死讯得出小白鼠的编号。
💡 从小白鼠的死讯,我们可以得到两个信息:
1:有多少只小白鼠死了
2:具体是哪些小白鼠死了
也就是说我们要找到一种方法,由这两个信息推理出药的二进制序列,而如果我们要找到这个方法,就必须了解怎样可以得到二进制序列。
💡因为二进制序列是由0和1组成的,所以想要得到一个二进制序列,等价于得到如下两个信息:
1:这个二进制序列有多少个1
2:具体哪些比特位是1
想必大家已经发现了,从小白鼠死讯得到的两个消息和得到二进制序列需要的两个信息,存在一一对应的关系,也就是我们需要通过有多少只小白鼠死了确定二进制序列有多少个1,并且在二进制序列中为1的比特位上必定有对应的老鼠喝了毒药。所以我们不难想到要对小白鼠进行编号处理,从而建立起小白鼠和二进制序列位数的一一对应关系。
例如:如果最后只有1号和3号小白鼠死了,我们可以知道二进制序列中有两个1,并且知道第一位和第三位是1,则药的编号是5:
💡:具体方法图解
由于我们一开始不知道毒药的二进制序列有多少个1,所以我们至少需要10只老鼠才能确保一定找出毒药。
由于本人水平十分有限,若有错误请即使告知!如果有帮助别忘了,万分感谢。
点赞👍 收藏✨ 关注✌
以上是关于智力题可怜的小白鼠又被下药了(*^@^*)o,你能找到那瓶毒药吗?的主要内容,如果未能解决你的问题,请参考以下文章