很久没冒泡了。今天听到一道百度面试的智力题,想到了一个答案,逐与大家分享之。
题目:有36匹马和一条6赛道的跑马场,没有计时器,请用最少的比赛轮次挑选出最快的3匹马。
因为没有计时器,所以不同马之间都要比一比。不过,我们的任务是选出最快的3匹而不是排序,所以要尽量减少比赛轮次,那么:1、比过的马不用再比;2、已知跑得慢的马也不用再次参加了。有了上面这两条原则做指导,解决起来不是特别困难。下面我给出我的方案。
1. 36匹马分为6组,比赛6次,取出每次最快的前三名。为什么要取前三名呢,因为最快的3匹马被分在同一组也是有可能的。下面比赛后的结果
第一组 01 > 02 > 03第二组 04 > 05 > 06第三组 07 > 08 > 09第四组 10 > 11 > 12第五组 13 > 14 > 15第六组 16 > 17 > 18
2. 让每组的第二名比赛,假设比赛的成绩是按下面排序的。其中背景为紫色的都是无法进入前三名的,被淘汰。
第一组 01 > 02 > 03∨第二组 04 > 05 > 06∨第三组 07 > 08 > 09∨第四组 10 > 11 > 12∨第五组 13 > 14 > 15∨第六组 16 > 17 > 18
3. 接下来,让03、04、07、10、13、16比赛。如果
- 03得了第一名,那么跑得最快的三匹是01 02 03
- 03得了第二名,那么跑得最快的三匹是v1 01 02
- 03得了第三名及其以后,那么直接让 v1 v2 v3 01 02 再比赛一次,取得最终的前三名。
所以总共需要比赛6 + 1 + 1 + (1) = 8次或9次。
这就是我想到的方法,欢迎大家拍砖。