|
发表于 2010-12-11 16:21:00
|
显示全部楼层
Re:逻辑题目,讨论下
思路如下:
当1000桶酒里有1桶毒酒时,有1000种不同状态。 要用一个犯人的死/活,二进制来表示。那么需要10位,就可以唯一表达出每一种状态。因为,2^10=1024种唯一状态。
当1000桶酒里有2桶毒酒时,有1000*999=999000种状态,如果用2进制唯一表示的话,需要20位来表达。因为2^19=524288,不足以唯一表达可能的状态, 2^20=1048576种状态,因此需要20位犯人,就可以唯一表示出所有状态。
因此,正确答案就是: 20。
现在的问题是,从20个0,“0000 00000000 00000000” 到 20个1,“1111 11111111 11111111”中,每个状态都可以唯一映射两瓶毒酒的一个确定的位置。 那么喝酒的方法是什么?
解答: 把所有的状态编上号码,令每一个犯人分别对应于位数2^0, 2^1,... 2^19,编号为:1,2,4,8,16,32,。。。,2^18, 2^19, 喝酒方法就是:
假定对编号 “1111 00110011 10011001”(F 33 99 )H=第996249种状态
根据996249=1+0*2^1+0*2^2+1*2^3+...+1*2^19, 1表示让那个位数上的犯人喝酒,0表示对应位上的犯人不喝。
这样根据死掉的犯人的编号总和,就查询得出到那个状态,继而得到两瓶毒酒的确定位置。
|
|