前端面试逻辑题

今天视频面试,面试官给我出了一道逻辑题。第一道是编程以及编程工具有关的,因为个人接触项目经验比较少,所以面试官很贴心的换了另外一个给我。题目如下:
有八个小球,一个天平,有一个比较重,怎样最快找到质量最重的那个?

我稍微想了一下,给出第一个答案:对半取,4个为一组,找到重的一侧再取两个一组,继续对半称。一共三轮。

很显然,这不是最优答案,面试官让我再想想看有没有更好一点的方案。我又思考了一下,说:

如果重的小球质量足够重的话,可设一个阈值,那就4个一组对半称以后,抓去重的一侧往另外一侧天平盘里抓小球,根据阈值大小决定抓去小球的数量,如果阈值够大,最多可抓取三个小球放至对面天平盘里,此时最优的情况便是一次抓取就可知质量最重的小球是哪个,此时最优结果为2

听完我的答案,面试官略微停顿了一下,说已经很接近答案了,便没再继续纠结这个问题,让我有时间可以再思考一下。

下午我忽然又想起来这个事情,我第一种方案虽然借鉴了折半查找算法的方式,却忽略了他的效率并不是最优的,第二种面试官说接近答案,但我明白这肯定不是最好的,因为有最优就会有最差,这涉及到概率问题了,当时考虑到面试的时间问题没有仔细再研究。百度查了一下答案,如下:

**

2次。
8只球编号1、2、3、4、5、6、7、8; 取1、2、3和4、5、6对称; 若两边一样重,再称7、8可知;
若两边不一样重,则取重的那边的三个球中的两个对称就知道了,若两球相等就是剩下那个
**

醍醐灌顶,恍然大悟。

简单分析:
8只小球,天平托盘为2。
要求最优,从设想1次完成开始,
很显然1次难以做到;
设想2次完成,则意味着测量一次,则剩下第二次测量必须出来准确结果:

  • 44对半分第一次4-4,第二次2-2不能取到结果,我的答案一out;
  • 35分,显然这样天平没办法对3和5分别称取,不用想,out;
  • 26分,前方高能:
    ——》对2,可一次拿到结果(此时达最优);一次拿不到(两边平,最重小球不在2),转称6,此时进入第二轮测量;
    ——》对6,(此时为2未拿到结果,转称6)3-3两边必定不一致,取重(此时为不能缺少的第二轮测量)的一侧中两个来称拿到最终答案,其实此时进行了第三轮测量,故要考虑2-6的测量顺序:
    前方高能2:
    ——》先对6,若平,则第二次测量剩余2小球即可拿到答案;
    ——》若不平,直接取最重一侧三选二测量,可拿到答案,此时,无论最重小球是在2还是6中,都会是只进行了两轮称量,标准答案出!

tip:先尝试最复杂的(排除大多数),看答案是否在里面,若在则继续,若不在,则可抛弃复杂直奔最简单的。试水即是~

(但通常大家的逻辑是:先尝试最简单的,看是不是在最简单的2里面,不在则再找复杂的,这样虽然有最省事一次拿到小球的概率,但也有最复杂最不优的称三次拿到小球的概率;反其道而行之,如果测量一次复杂的,可知道答案范围,则可一次排除复杂6所占有的8的大多数,留下最小的2,难点就是如何确定最小的2的第一次测量(前在6已测过一轮,此为第二轮)和复杂的6的第二次测量的出结果的概率相同(都为1 ,即实际上的第二次测量都必须拿到最重的小球 完成任务))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值