• Google研发面试题


    今天很开心找到了一个很不错的研发面试题,很考验临时反应能力,特地拿出来和大家分享一下此题以及自己做该题的心得体会!!!

     题目:

    总共有12个外表都一样的金属球,其中有11个球的重量是相同的,1个球的重量可能比其他11个球要重,也可能比较其他11个球轻,这个球称之为异常球,问:如何利用一个天平来称重三次找出这个异常球?

    下面来讲解我的思路,希望大家拿出笔和纸。

    首先我们将12个球分为三份,将球依次排好序号为1-12,如下:

    A组选手:1,2,3,4         B组选手:5,6,7,8         C组选手:9,10,11,12

    任意拿出两组放在天平两边,下面我们就以拿出AB比较。

    【1】如果A == B,因为只有1个异常球,而A == B,则说明C组(9,10,11,12)异常球:

      紧接着从C组(异常组中)取出3个球,从正常组A或者B组中也取出3个球来进行比较,例如我们取出B组6,7,8【左边】    vs  C组9,10,11 【右边】

      如果天平平衡,则C组剩下的球就为异常球,这样就比较2次;

      如果天平不平衡,那就知道了异常球是重还是轻,

        那就从右边的三个球中再任取两个,放入天平中:

          如果天平平衡,剩下的球即为异常球;这样就比较2次

          如果不平衡,则可根据上面已经得出的结论:异常球是重还是轻的结论判断哪一个是异常球,这样比较3次

    【2】如果A != B,因为只有1个异常球,则说明C组为标准球,异常球在A组或者B组中

      此时要分两种情况来分析:

      (1)左侧重右侧轻1,2,3,4 > 5,6,7,8(2)左侧轻右侧重1,2,3,4 < 5,6,7,8

    ========》

      (1)左侧重右侧轻1,2,3,4 5,6,7,8 【异常球可能是1,2,3,4重,或者5,6,7,8轻】

          然后我们比较16,7,859,10,11 ------>(9,10,11是正常球标准球)

      如果平衡:

    就可以说明,16,7,85 是标准球,结合上一个比较结果,可以得出的是异常球为2,3,4且为重球,这样从2,3,4里面找两个球比对一下即可,这样就比较3次;

      如果不平衡:

        左侧重:则1为异常重球,这样就比较2次

          左侧轻:异常球是6,7,8且为轻球,从三个球中选出两个再次称一次选择轻的即可,这样就比较3次

     

     

    (2)左侧轻右侧重即1,2,3,4 < 5,6,7,8 解法同上面差不多【异常球可能是1,2,3,4轻,或者 5,6,7,8重】

    然后我们比较2,3,4519,10,11------->(9,10,11是正常球标准球)

    如果平衡:

    就可以说明1,2,3,45是标准球,结合上一次的比较结果,可以得出的是异常球为6,7,8且为重球,这样从6,7,8里面选择两个球比对一次即可得出结论,这样就比较3次;

    如果不平衡:
      左侧重: 则5为异常球(结合1,2,3,4 < 5,6,7,8),这样就比较2次;

    左侧轻: 异常球为2,3,4且为轻球,从三个球中选择两个球再称一次,选择轻的即可,这样就比较3次.

     

    上面就是关于这个题目,我的思路和解法,欢迎大家指正!!!写完正好凌晨一点钟,晚安喽!

     

  • 相关阅读:
    暴雪HASH算法(转)
    实现的一些内存辅助操作函数
    仿SGI STL的traits技法
    c++实现kd树
    利用libpcap打印ip包
    在使用cognos时遇到的问题记录帖
    DW,DM,ODS的区别
    解决问题的8种职业能力
    ASP.NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)
    关于IIS和.NET 4.0的问题总结(转)
  • 原文地址:https://www.cnblogs.com/guohai-stronger/p/11729822.html
Copyright © 2020-2023  润新知