程序员基础算法题——国王试酒
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:国王有100桶酒,需要在24小时之后使用,但是知道这100桶酒里面有一桶酒被下了毒,而且毒也是24小时之后发作,现在国王要用死囚去试毒,问:最少可以用多少死囚可以测试出哪桶酒有毒?(一个人可以喝多桶酒中的酒)
答案:7个人
解法:将一百桶酒编号,从0到99,然后将十进制的0到99变为二进制,例如就为0就变为0000 0000,1就为0000 0001 .. .. 第99桶为0110 0011
然后第1个人喝编号二进制末尾位为1的酒XXXX XXX1 (X为0或1)
然后第2个人喝编号二进制第二位为1的酒XXXX XX1X (X为0或1)
... ...
然后第7个人喝编号二进制第7位为1的酒X1XX XXXX (X为0或1)
这样说可能还是有点不能理解,那就将100桶酒变为16桶酒就只需要4个人红色为0-15的十进制黄色底纹的为十进制对应二进制,下面喝对应编号酒的死囚,最后就可以根据死囚的情况判断哪桶酒有毒了
看到这里:我们就可以看出,利用二进制的思想,16(24)桶酒需要4个人,那么100(64[26]<100<128[27])酒需要7个人来测试出来
对于不了解2进制的,其实也可以逆向思维,先想2个人可以测出几桶酒,3个人可以测出几桶酒,以此找出规律,最后找出类似于排列组合的问题。