小白鼠试药的答案

旭子 2011-09-22 11:34:35
1、我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分()
a 5瓶 b 6 c 31 d 32
答案是 32,下面给出程序实现的一般推论


# include <stdio.h>
# include <math.h>
int at_apnot;
int max;

int main(int argc, char **argv)
{
int mid;
int mouse_count;
printf("输入老鼠个数为:");
scanf("%d", &mouse_count);
max = (int)pow(2, (double)mouse_count);

for (mid = 1; mid <= mouse_count; mid++)
{
printf("老鼠 %d 喝:", mid);
for (at_apnot = 1; at_apnot < max; at_apnot++)
{
if (at_apnot & (0x1 << (mid - 1)))
printf(" %d\t", at_apnot);
}
putchar('\n');
}

getchar();
return 0;
}

...全文
5563 80 打赏 收藏 转发到动态 举报
写回复
用AI写文章
80 条回复
切换为时间正序
请发表友善的回复…
发表回复
56564354 2013-10-05
  • 打赏
  • 举报
回复
这是什么算法 百度什么能学到 麻烦告我下
zhangchao621621 2013-07-23
  • 打赏
  • 举报
回复
都看 晕了。 我觉得这样看容易理解: 5个鼠 取1只可以 标识一瓶 5个中 取两只又可以唯一标识 一瓶 5个中 取3只又可以唯一标识 一瓶 所以是:C51 + C52 + C53 + C54 + C55 = (1+1)^5 -1 = 31. 上面是组合的写法。
xyfFG0453 2013-05-15
  • 打赏
  • 举报
回复
我一看前面的几位都说32瓶,LZ还理直气壮的争论了半天,我都差点气得想揍LZ了,我一看题意, 第一 瓶子是很多瓶(即个数不确定)。 第二 老鼠有5只(即个数是确定的)。 所以有老鼠喝过的只有31瓶,剩下的都没喝过,肯定的 百分之百的是 31种啊,这是数学问题。 真不知道你们的32瓶,什么剩下的一瓶 到底是哪里来的? 剩下的只有一瓶???
旭子 2011-12-20
  • 打赏
  • 举报
回复
结了结了。。
[Quote=引用 75 楼 pubb1111 的回复:]

LZ是否该结贴了啊
[/Quote]
pubb1111 2011-12-06
  • 打赏
  • 举报
回复
LZ是否该结贴了啊
pubb1111 2011-12-06
  • 打赏
  • 举报
回复
其实题目有些小陷阱,例如没说5只白老鼠是否都会中招,到底有多少瓶!
其实关键不是题目,主要想考的是否掌握了这个算法而已!记得是前年学到的算法,有点忘记了,经这题后,印象深刻了!
pubb1111 2011-12-06
  • 打赏
  • 举报
回复
MARK
其实就是高数里面的一个算法!
yuhao12370 2011-10-11
  • 打赏
  • 举报
回复
我还是没有搞懂,不是没有说数量吗?那应该可以检测到总数的5/6没有毒才对啊。每只老鼠占1/6。
旭子 2011-10-07
  • 打赏
  • 举报
回复
汗。。。没必要这么纠结吧。。
[Quote=引用 69 楼 liushui1010 的回复:]
我说一下这个问题,我感觉上面的同志全都错误,因为楼主说在5分钟的时间检测出来,超出就不算了,那楼主又说小白鼠5分钟之后才会死,所以5分钟时间没有一个白鼠会死亡,5分钟根本就检测不出来。就算小白鼠在0秒吃了毒药,也要在5分钟之后死,5分钟之内还是一个也不会死。所以我认为5分钟根本就检测不出来。 如果在5分钟之后咱们知道检测出来。那跟楼主说的问题不一样了吧。。。
[/Quote]
小任 2011-10-04
  • 打赏
  • 举报
回复
如果你们要来喷我,那就喷吧。我说的只是我认为的。。
小任 2011-10-04
  • 打赏
  • 举报
回复
我说一下这个问题,我感觉上面的同志全都错误,因为楼主说在5分钟的时间检测出来,超出就不算了,那楼主又说小白鼠5分钟之后才会死,所以5分钟时间没有一个白鼠会死亡,5分钟根本就检测不出来。就算小白鼠在0秒吃了毒药,也要在5分钟之后死,5分钟之内还是一个也不会死。所以我认为5分钟根本就检测不出来。 如果在5分钟之后咱们知道检测出来。那跟楼主说的问题不一样了吧。。。
旭子 2011-09-29
  • 打赏
  • 举报
回复
嗯 是的 我在55楼已经说过了

[Quote=引用 67 楼 my_caterpillar 的回复:]
个人觉得是31 假设题目说有100瓶 其他都不变 问 可以测出多少瓶呢 LZ?
[/Quote]
my_caterpillar 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 dengxu11 的回复:]
1、我们有很多瓶无色的液体,其中有一瓶是毒药,其它都是蒸馏水,实验的小白鼠喝了以后会在5分钟后死亡,而喝到蒸馏水的小白鼠则一切正常。现在有5只小白鼠,请问一下,我们用这五只小白鼠,5分钟的时间,能够检测多少瓶液体的成分()
a 5瓶 b 6 c 31 d 32
答案是 32,下面给出程序实现的一般推论

C/C++ code

# include <stdio.h>
# include ……
[/Quote]

个人觉得是31 假设题目说有100瓶 其他都不变 问 可以测出多少瓶呢 LZ?
kzl0629 2011-09-28
  • 打赏
  • 举报
回复
不就是海明码吗?

5位校验位能纠一位错
旭子 2011-09-28
  • 打赏
  • 举报
回复
这位仁兄比较纠结。。。似乎做题目的方向不对啊。。。秒表就不必用了。。。
[Quote=引用 35 楼 kansousama 的回复:]

条件不明了,
假如,小白鼠一分钟能试几瓶都没说,
如果1分钟一瓶的话,5个也就25瓶,
小白鼠喝到毒药后是马上中毒反应5分钟才死,
还是喝道毒药跟没事一样,5分钟后突然就死了呢
如果沒这些限制条件,情况就是不定的
例如 1秒一瓶,喝到毒药跟没事一样,继续喝一下
那么我只需一个老鼠 一个秒表,
老鼠运气被,第一个就是毒药,那么5分钟后老鼠才毒死
那么根据时间也能推算出第一瓶就是……
[/Quote]
旭子 2011-09-28
  • 打赏
  • 举报
回复
可以这么理解
[Quote=引用 59 楼 kzl0629 的回复:]

不就是海明码吗?

5位校验位能纠一位错
[/Quote]
旭子 2011-09-28
  • 打赏
  • 举报
回复
仔细看了大家的回复,楼上诸位所说几乎都对
莫恶 2011-09-28
  • 打赏
  • 举报
回复
能理解理解LZ的问题,就是说如果有5只老鼠,那么可以用来检测多少瓶水,而不是有很多水,用5只老鼠可以检测多少。
cqdyh 2011-09-28
  • 打赏
  • 举报
回复
具体喂法也是对应的方式
0 0 0 0 1 一号药
0 0 0 1 0 二号药
0 0 0 1 1 三号药
1 1 1 1 0 三十号药
1 1 1 1 1 三十一号药
如果,五只全活 这31瓶全为水
如果,仅第一只死 这一号为毒
....
如果, 五只全死,第三十一号为毒

此题,如果有无数瓶中一瓶毒,则只能确定 31瓶
如果,32瓶中有且只有一瓶毒,则能确定 32个样本
cqdyh 2011-09-28
  • 打赏
  • 举报
回复
这个问题是可以这样?
上面讲了, 怎么喂,
其它实是要看老鼠怎么死.
0 如果代表活, 1 则代表死
0 0 0 0 0 全活
1 1 1 1 1 全死
0 0 0 0 1 第一只死
0 0 0 1 0 第二只死
0 0 0 1 1 第一只与第二只死
...... 2^5 次方...
加载更多回复(58)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧