用十只耗子试出1000瓶中的一瓶毒酒
来源:互联网 发布:资源管理器 知乎 编辑:程序博客网 时间:2024/05/17 03:53
1000瓶酒,有1瓶是下了毒的,还有10只小耗子,让它们喝。中招的会在2小时前后死去(大约是两个小时,但决不会超过3小时),给你3小时,排除尽可能多的无毒酒,尽可能的缩小毒酒存在的范围。最厉害的办法是可以准确的找到那一瓶毒酒。应该怎么办呢?
当然,给耗子灌酒的时间可以忽略不计,每个耗子随便喝几瓶都成,酒也是喝不完的。由于体质不同,先喝到毒酒的耗子不一定先死。
第一个办法,每个耗子都喝一些酒,而且它们都还要喝一些别的耗子喝过的酒,如果只有一只耗子死掉了,那么毒酒就在只有它自己喝过那些酒里,如果死耗子超过一只,毒酒就在它们都喝过的那些酒里。这个办法精度比较低,范围在几十瓶内,仅好过每只耗子平均的分100瓶。
第二个办法,把1000瓶酒排成10行×100列的方阵,先把10只耗子摆在行上,一只耗子负责喝一行,就是100瓶。再把10只耗子摆在列上,一只耗子负责喝10列。这样,如果死了一只耗子,那么毒酒在10瓶之内,如果死了两只耗子,毒酒在二十瓶以内。你看,这个办法一下就提高的准确度。
第三个办法,把1000瓶酒排成10行×10列×10层的方块,先让10只耗子沿着行的方向喝,每只耗子喝100瓶,再让10只耗子沿着列的方向喝,每只耗子喝100瓶,最后让10只耗子沿着层的方向喝,每只耗子喝还是喝100瓶。都喝完了以后,如果只死了一只耗子,那么它三次都喝到的那瓶就是毒酒了。如果死了两只或者三只耗子,那么就可以精确到它们都喝过的那六瓶里面,为什么是六瓶就不说啦,一句两句也说不清楚,还要排列组合列方程式呢!你看,我们又进了一步,但是千万不要以为每只耗子喝的酒越多就会越精确!
最猛的办法出场了,先给每瓶酒编号,每瓶都编不同的号,可不是从1编到1000,那样做和不编号效果是一样的,这样做:
第1瓶 00000 00001
第2瓶 00000 00010
第3瓶 00000 00011
第4瓶 00000 00100
第5瓶 00000 00101
...
...
...
...
第1000瓶 11111 01000
(...
第1023瓶 11111 11111
也就是说这种办法的精度最高可达到2的10次方=1024)
当然,给耗子灌酒的时间可以忽略不计,每个耗子随便喝几瓶都成,酒也是喝不完的。由于体质不同,先喝到毒酒的耗子不一定先死。
第一个办法,每个耗子都喝一些酒,而且它们都还要喝一些别的耗子喝过的酒,如果只有一只耗子死掉了,那么毒酒就在只有它自己喝过那些酒里,如果死耗子超过一只,毒酒就在它们都喝过的那些酒里。这个办法精度比较低,范围在几十瓶内,仅好过每只耗子平均的分100瓶。
第二个办法,把1000瓶酒排成10行×100列的方阵,先把10只耗子摆在行上,一只耗子负责喝一行,就是100瓶。再把10只耗子摆在列上,一只耗子负责喝10列。这样,如果死了一只耗子,那么毒酒在10瓶之内,如果死了两只耗子,毒酒在二十瓶以内。你看,这个办法一下就提高的准确度。
第三个办法,把1000瓶酒排成10行×10列×10层的方块,先让10只耗子沿着行的方向喝,每只耗子喝100瓶,再让10只耗子沿着列的方向喝,每只耗子喝100瓶,最后让10只耗子沿着层的方向喝,每只耗子喝还是喝100瓶。都喝完了以后,如果只死了一只耗子,那么它三次都喝到的那瓶就是毒酒了。如果死了两只或者三只耗子,那么就可以精确到它们都喝过的那六瓶里面,为什么是六瓶就不说啦,一句两句也说不清楚,还要排列组合列方程式呢!你看,我们又进了一步,但是千万不要以为每只耗子喝的酒越多就会越精确!
最猛的办法出场了,先给每瓶酒编号,每瓶都编不同的号,可不是从1编到1000,那样做和不编号效果是一样的,这样做:
第1瓶 00000 00001
第2瓶 00000 00010
第3瓶 00000 00011
第4瓶 00000 00100
第5瓶 00000 00101
...
...
...
...
第1000瓶 11111 01000
(...
第1023瓶 11111 11111
也就是说这种办法的精度最高可达到2的10次方=1024)
再让耗子排队站好,abcde fghij
耗子的顺序不能变,它们和酒的编号中的每一位是对应的,这个很重要!来,第一瓶酒(编号00000 00001),只让是1的那位上的耗子喝,就是j耗子,其他位上是0的对应的耗子不用喝。然后第二瓶,第三瓶都是这样,只有对上1的那只耗子要喝。最后1000瓶都喝完了,耗子们有死有活,我们让死耗子=1,活耗子=0,于是,耗子们abcde fghij 就变成了一串0和1,假如这串数字是10001 00001,那么编号是这个数字的酒(用2进制转10进制就是第545瓶)就是毒酒啦!
原文链接:http://blog.sina.com.cn/s/blog_4d1f40c00100jigp.html
- 用十只耗子试出1000瓶中的一瓶毒酒
- 10只老鼠10只杯检测1000瓶酒中的毒酒
- 1000桶酒中含两桶毒酒问题
- 1000桶毒酒问题
- 耗子
- 1000瓶酒其中1瓶有毒,10只老鼠找出毒酒
- 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
- 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
- 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
- 8瓶酒一瓶有毒
- 1000桶酒中寻找一桶毒酒算法
- 数学问题:1000瓶酒找1毒酒
- 1000桶酒中寻找一桶毒酒算法
- 1000桶酒中寻找一桶毒酒算法
- 1000桶酒中寻找一桶毒酒算法
- 1000桶酒中寻找一桶毒酒算法
- 小白鼠试毒酒的升级版
- 【经典】死囚试毒酒(改编)
- Factovisors-ACM
- struts ActionForm 空字段问题
- cookie的相关
- 组织人员数据管理系统的思路
- 文件结束符eof的正确使用
- 用十只耗子试出1000瓶中的一瓶毒酒
- C# ReferenceEquals,equals,==区别
- 多态(Polymorphism)
- iPhone Apple Push Notification Service (APNS)
- 敏捷中国2010会议总结
- How to enforce Checkstyle in SVN commits : Simple Guide
- AS3多态中的向上转换
- 如何做人,如何处世。
- Git 使用的简单汇总