写在前面:最近在刷面试题的过程中遇到这么一道题,感觉解读题目的角度很多,这里介绍自己的做法。注意:本文并不是参考答案,只是为大家在面试的时候多提供一条思路,或许可以获得面试官的青睐。
25匹马,5个跑道,每个跑道最多能有 1 匹马进行比赛,最少比多少次能比出前 3 名?前 5名?
1 - 一些假设
同一马匹在任意场次的速度都能保持一致。
2 - 前 3 名分析
-
将 25 匹马分为 5 个小组,每个小组跑一场,共 5 场比赛。假设决出的顺序如下图:
组A 组B 组C 组D 组E A1 B1 C1 D1 E1 A2 B2 C2 D2 E2 A3 B3 C3 D3 E3 A4 B4 C4 D4 E4 A5 B5 C5 D5 E5 -
取每个小组的第一名跑一场,假设决出的顺序为
A1 > B1 > C1 > D1 > E1
,则 A1 是第一名,剔除掉没有希望进入前 3 的马匹后,排序表变为:组A 组B 组C 组D 组E - B1 C1 - - A2 B2 - - - A3 - - - - - - - - - - - - - - 容易发现,刚好只剩下 5 匹马,可以在一场比赛跑完。
-
结果就是 5 + 1 + 1 = 7 场。
3 - 前 5 名分析
-
和前 3 名的分析类似,分成 5 个小组,5 个小组的第一名再跑一场,决出第一名后剔除没有机会进入前 5 的马匹,排序表如下:
组A 组B 组C 组D 组E - B1
C1 D1 E1 A2 B2 C2 D2 - A3 B3 C3 - - A4 B4 - - - A5 - - - - 注意到 B1 是 BCDE 四组中最快的马,但是 B1 和 A 组剩下的马的快慢暂不得知。B1 与 A 组马的顺序将会直接影响接下来需要跑的场次。
-
让 A 组剩下的 4 匹马和 B1 跑一场,则可能出现如下结果:
结果 1 结果 2 结果 3 结果 4 结果 5 A2 A2 A2 A2 B1
A3 A3 A3 B1
A2 A4 A4 B1
A3 A3 A5 B1
A4 A4 A4 B1
A5 A5 A5 A5 容易发现,由于 B1 的特殊性,结果 1 和结果 2 其实已经决出了前 5 的马匹(包括 A1),结果 3 决出了前 4 的马匹,结果 4 决出了前 3 的马匹,结果 5 决出了前 2 的马匹。
-
所以最少需要 5 + 1 + 1 = 7 场。(题目到这里就可以结束了)
-
结果 1 和结果 2 具有偶然性,出现其他结果时的情况比较复杂,但是考虑到每场都会至少确定 1 个名次,那么实际上最多 5 + 5 =10 场就能确定前 5 。
4 - 拓展
64匹马,8条跑道,决出前4名?
- 分 8 组,决出第一名之后剔除不能进入前 4 的马匹,如下:
还剩 9 匹马,一次跑不完。组A 组B 组C 组D 组E … - B1 C1 D1 - - A2 B2 C2 - - - A3 B3 - - - - A4 - - - - - - 笔者的考虑是第 10 场先不安排A4、B3、C2、D1中的某一匹,因为这 4 匹马相对较慢,很大几率不会入选前 4,根据结果来确认是否需要第 11 场。比如,第 10 场 D1 没有上场,如果(速度比 D1 快的)B1 或者 C1 不在前 3,那么 D1 就没有再上场的必要了。反之,若 B1、C1分别是第 2 、第 3 名,那么 D1 还是有机会争一争第 4 的。
- 所以按这个思路,最多 11 场,最少 10 场就能确认前 4。
再次强调:本文不是标准答案,请勿擅自曲解笔者意思。最后,祝大家面试顺利~
正文结束,欢迎留言讨论。