1000瓶药水,其中至多有1瓶剧毒

现在给你10只小狗在24小时内通过小狗试药的方式找出哪瓶药有毒或者全部无毒

(小狗服完药20小时后才能判断是否中毒)

10只小狗每只都有死和不死两种情况,所以死亡情况就有2的10次方=1024种
1024大于1000,也就是说判断出毒药是可以实现的
用2进制表示1000瓶药,用2进制的位表示小狗,就能建立起这个问题的数学模型

1000瓶毒药编号为1-1000
小狗编号10-1
第1瓶给第1只小狗吃。
第2瓶给第2只小狗吃。
第3瓶给第1 2只小狗吃。
第4瓶给第4只小狗吃。
第5瓶给第1 4只小狗吃。
第6瓶给第2 4只小狗吃。
第7瓶给第1 2 4只小狗吃。
...
以此类推
...
第1000瓶给第10 9 8 7 6 4只小狗吃。
根据小狗死的情况就知道吃药的情况。

在2进制中1000瓶药表示为
1.10.11.100.101.110.111.1000.1001.1010.1011......
...1111101000
看哪些狗死了,比如说第10 7 4 3 2 1只小狗死了
我们就可以得出毒药是第1001001111瓶。
换算回十进制就是1+2+4+8+64+512=591
也就是说第591瓶是毒药。

逆向思考:假设第X瓶水有毒,可以得出X的二进制,X的二进制与兔子的生死排列一致

1000瓶药水,其中至多有1瓶剧毒,布布扣,bubuko.com

时间: 2024-10-14 12:44:55

1000瓶药水,其中至多有1瓶剧毒的相关文章

java:50瓶可乐,每喝三瓶给你一瓶,请问最后喝了多少瓶.

package jihuoma; //50瓶可乐,每喝三瓶给你一瓶,请问最后喝了多少瓶. public class Test1 { public static void main(String[] args) { int count=50;//统计喝了多少瓶,初值50瓶 int sum=50;//初值50瓶可乐 while(true) { sum=sum-3;//喝三瓶后送一瓶,即下面的count++ count++;//送一瓶 sum=sum+1;//送了一瓶后,那么剩余的可乐数量加1 if(

100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶

最近碰到一道题目.就是关于酒瓶的(100元买酒,2元买一瓶,两个空瓶换一瓶,求最后能买多少瓶). 刚开始没头绪,仔细一想原来不过如此. 经过分析,所能买到的酒瓶等于    最后所有的空瓶数 java代码求解如下: import java.util.Scanner; public class Bottle {         //空瓶数 static int blank=0; //直接能买到的酒瓶数 static int sum=0; public static void main(String[

cf #379div2

A. 题意:输入一串字符只含A和D,判断A和D的多少比较, 分析:直接计数 B. 题意:给出数字2,3,5,6的个数,用这些数组成256和32,要求最后组成的数的和最大 分析:贪心,优先组成256,然后组成32,  ,: C. 题意:要求你制作出n瓶药水,初始每瓶药水要花费x的时间,另有两种魔法操作可以缩短制作时间,type1 :将制作每一瓶药水的时间都缩短至ai的时间,但是要花费bi的魔法点数:type2:瞬间制作出ci瓶药水(相当这ci瓶药水没花时间),但是要花费di的魔法点数.初始你有s的

可以喝多少瓶啤酒

可以喝多少瓶啤酒 问题 4个瓶盖,或者2个酒瓶,可以换一瓶啤酒, 现在有10块钱,啤酒2块钱一瓶,问: 共可以喝多少瓶啤酒? 解法一 问题分析 手里有10块钱,既然要喝尽可能多的啤酒,就要买尽可能的多买,所以直接全部买成啤酒,共可买5瓶.现在共有5瓶啤酒,那么可以进行以下的操作(序号越低,优先级越高): 如果有酒,则全部喝掉: 如果有 >= 4个瓶盖,则换成 n/4 瓶啤酒: 如果有 >= 2个酒瓶,则换成 n/2 瓶啤酒: 显然,如果用程序模拟,实现起来很简单. 结果 代码: # encod

每瓶啤酒2元,2个空酒瓶或4个瓶盖可换1瓶啤酒。10元最多可喝多少瓶啤酒? php

//根据题意设定初始变量值//然后 一个while循环去操作//每换得一个瓶子,换的那个减去要做相应的数目//然后喝了啤酒后, 各数量加1//直到不符合要求.跳出循环 1 class Beer{ 2 3 protected $uni_gai = 4; //每4个瓶盖1瓶 4 protected $uni_bottle = 2; //每两个瓶子换1瓶 5 protected $uni_beer = 2; //每瓶2块钱 6 protected $rs = array();//存取结果 7 prot

微信营销案例六 爱心漂流瓶

案例六:招商银行 爱心漂流瓶 微信官方对已漂流瓶的设置,也让很多商家看漂流瓶的商机,微信商家开始通过扔瓶子做活动推广.使得合作商家推广的活动在某一时间段内抛出的”漂流瓶”数量大增,普通用户”捞”到的频率也会增加.招商银行就是其中一个. 日前,招商银行发起了一个微信“爱心漂流瓶的活动”:微信用户用“漂流瓶”功能捡到招商银行漂流瓶,回复之后招商银行便会通过“小积分,微慈善”平台为自闭症儿童提供帮助.在此活动期间,有媒体统计,用户每捡十次漂流瓶便基本上有一次会捡到招行的爱心漂流瓶. 微信营销案例六 爱

javascript计算啤酒2元一瓶,4个盖换一瓶,2个瓶换一瓶,10元钱最多喝多少瓶

var n = 0//当前剩下多少瓶加上喝赢了多少瓶 var x = 5//初始多少瓶 var y = 0//除了喝掉的,剩下多少瓶 var z = 0;//总数 var arr = []//定义一个数组存放值 arr.push(x);//先把最初始瓶数添加到数组 //程序1 var fn = function(s){ y = s -4; //剩下多少瓶 s = y + parseInt(s/4) + parseInt(s/2);//剩下多少瓶加上赢了多少瓶 n = s//赋值给上面的n arr

啤酒2块一瓶,4个瓶盖可换1瓶,2个空瓶可换1瓶,10块钱可以喝多少瓶?

1.编程的写法: using System; using System.Collections.Generic; using System.Text; namespace SlowX.CalcEgg { class Program { protected static string ShowStr(int theResult, int KP, int PG) { return theResult + "瓶啤酒." + KP + "空瓶." + PG + "

1 元钱买一瓶汽水,两个空汽水瓶换一瓶汽水。现有 20 元钱,问最多可以喝到多少瓶汽水?

答案一:20+10+5+2+ 1+ 1= 39瓶 答案二:20+ 10+ 5+ 2+ 1+ 1+ 1= 40 一开始 20瓶没有问题,随后的 10瓶和 5瓶也都没有问题,接着把 5瓶分成 4瓶和 1瓶,前 4个空瓶再换 2瓶,喝完后 2瓶再换 1瓶,此时喝完后手头上剩余的空瓶数为 2个,把这 2个瓶 换 1瓶继续喝,喝完后把这 1个空瓶换 1瓶汽水,喝完换来的那瓶再把瓶子还给人家即可,所以最多可以喝的汽水数为: 20+ 10+ 5+ 2+ 1+ 1+ 1= 40.但是题目中并没有说可以赊账,因此