zoukankan      html  css  js  c++  java
  • 计算面试题

     有十箱苹果,每箱一百个,每个十斤,但有一箱每个九斤,问只称一次就找出这箱苹果,怎样做?

       给每个箱子编号,从1~10,从第一个箱子里面取1个,第二个取2个,第三个取3个...第10个取10个,然后称,因为每个箱子100个苹果,假如:每个箱子10斤,那么每个苹果就是0.1斤,这么取出来的苹果就是(1+2+3+4+5+6+7+8+9+10)*0.1 = 5.5斤,现在有一个箱子是9斤的,那么每个苹果就是0.09斤,所以称出来的结果就比5.5小,如果称出来的结果是5.41=5.5-0.09,斤,那么9斤的苹果就是第一箱,如果是4.96 = 5.5-0.09*6 斤,那么9斤的苹果就是第6箱,1一箱子10个、100个还是1000个苹果都无所谓,只要编号1~10,原理都是一样的。

    十只老鼠和一千瓶毒药的奇葩故事

     问题描述:有1000个一模一样的瓶子,其中有999瓶是普通的水,有1瓶是毒药。

                  任何喝下毒药的生命都会在一天后死亡。现在你只有10只小白鼠和1天的时间,如何检验出哪个瓶子有毒药?

    解答:

    根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。具体实现跟3个老鼠确定8个瓶子原理一样。
    000=0
    001=1
    010=2
    011=3
    100=4
    101=5
    110=6
    111=7
    一位表示一个老鼠,0-7表示8个瓶子。也就是分别将1、3、5、7号瓶子的药混起来给老鼠1吃,2、3、6、7号瓶子的药混起来给老鼠2吃,4、5、6、7号瓶子的药混起来给老鼠3吃,哪个老鼠死了,相应的位标为1。如老鼠1死了、老鼠2没死、老鼠3死了,那么就是101=5号瓶子有毒。
    同样道理10个老鼠可以确定1000个瓶子。

    步骤如下:

    将1千瓶水编上从 1 到 1千的号。

    将编号转化成 2 进制数。如 3 就是 11。

    将转化成 2 进制数的编号的水分成10组。将所有编号第10位是1的分在第1组,编号第9位是1的分在第2组...编号个位是1的分在第10组。因为 2 的 10 次方是 1024,大于 1千,所以毒药肯定在上面分的若干组中。

    将上面10组各组内的水混合。最后形成10瓶水。

    给老鼠标编上从 1 到 10的号。标号1的老鼠吃第1组混合的水,标号2的吃第2组混合的,以此类推。

    一天后观察结果。老鼠死了记为1,没死记为0。根据观察的结果可以得到类似这样的长度是10的数据: 1(标号1的死了)0(标号2的活着)01001010。 将这个数据转化成 2进制就是毒药的编号。原因是,如果标号为n的老鼠死了,那毒药一定在第n组中,即毒药的编号的2进制数第n位一定是1,否则为0。



  • 相关阅读:
    3.24
    3.23
    构建之法读书笔记2
    寒假学习day23
    寒假学习day22
    寒假学习day21
    寒假学习day20
    寒假学习day19
    寒假学习每周总结4
    寒假学习day18
  • 原文地址:https://www.cnblogs.com/sunTin/p/10394377.html
Copyright © 2011-2022 走看看