今天看到别人的面试算法题,求找出十包粉末中两包蓝色粉末的最短时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天看到别人的面试算法题,求找出十包粉末中两包蓝色粉末的最短时间相关的知识,希望对你有一定的参考价值。

题目:有4个杯子,10包粉末,其中有2包溶于水变蓝,其余无色,粉末溶于水2min才能显现颜色。求找出两包蓝色粉末的最短时间。假设水和粉末用不完。

方法一:

  第一趟:[12,34,56,78]  

    每个杯子分别放两包加水融化,剩下两包不管。可能的情况:

  (1)0个杯子变色,说明剩下两包就是蓝粉末

  (2)1个杯子变色,则蓝粉末在这个杯子两包和未融化的两包其中两包,第二趟四包融化一定可以找到

  (3)2个杯子变色,则在这两个杯子的四包粉末中,第二趟可找到。

   时间均值:E = 2*1/45 + 4*44/45 = 178/45;

方法二:

  第一趟:[123;456;78;910]

 (1)1个杯子变蓝,如果是3或4号杯子蓝,则就是放入该杯子中的2种粉末,否则在变蓝的杯子的3种粉末中,局部时间均值E1 = 2*2/45 + 4*6/45 = 26/45

 (2)2个杯子变蓝,

    -如果是前两个杯子变蓝,第二趟放置[14;25;36;15],分析关系:杯子14有联系,24有联系。

         a. 杯1变色而杯4不变则

    -如果是前面两个杯子有一个变蓝,后两个杯子有一个变蓝,则5种粉末随机取四种放在四个杯子中看现象。

    -如果后两个杯子变蓝,则4种粉末分别放在四个杯子中看现象就可以。

时间均值:E = 2*2/45 + 4*43/45 = 176/45;

方法三:

第一趟:[1234; 2567; 3689; 47910] 

  每个杯子只有一个独立的,每杯都与另外三杯有一个共同粉末(而且一包粉最多只能放在俩杯里),放置方法:1234放在杯子1,234分别放在杯234,567放在杯子2,67分别放杯子34...

  (1)不可能只有一个杯子蓝,除了1 10,每包粉末都放在两个杯子里。

  (2)两个杯子蓝: 则只能是这两个杯子共有而其他两个杯子无联系的。第一个蓝杯中有两包ab与两个非蓝杯有联系,另一蓝杯中有两包cd与两个非蓝杯有关系。abcd排除后剩下3包粉末。例如杯子12_[1234;2567]蓝,则可能是12,15,25, 局部时间均值E1 = 4*18/45 = 72/45;

  (3)三个杯子蓝,则可以排除非蓝杯的四种粉末剩下六种可能;至少有一包是这三个蓝杯中两个杯子的共同颜色,例如杯子123_[1234;2567;3689]蓝,则有可能是16,23,26,28,35,36,局部时间均值E2 = 4*24/45 = 96/45;

  (4)四个杯子蓝,则蓝色的粉末放在两个杯子中,且两包蓝色粉末没放在一起;则只能是29,37,46三种组合之一, 局部时间均值E3 = 4*3/45 = 12/45.

   时间均值:E = 4;

方法四:枚举

  即每种粉末都放入杯中溶解一次,直到找到两包蓝色粉末,

  (1)仅一趟就成功找到两包蓝色粉末, 局部时间均值E1 = 2*6/45 = 12/45;

      (2)两趟就成功找到两包蓝色粉末, 局部时间均值E2 = 4*23/45 = 92/45;

  (3)三趟才成功找到两包蓝色粉末, 局部时间均值E3 = 6*16/45 = 96/45;

  时间均值:E = 200/45;

方法五:时间差

  通过间隔段时间投放不同的粉末,观察水体变蓝的时间来判断和确认蓝色粉末。

方法六:.......

以上是关于今天看到别人的面试算法题,求找出十包粉末中两包蓝色粉末的最短时间的主要内容,如果未能解决你的问题,请参考以下文章

Java常考面试题

面试官,求求你不要问我这么简单但又刁难的算法题了

C#面试题常见算法

面试--算法题

数组中的趣味题一

双指针