您的位置:首页 > Web前端

前端面试题——赛马64找8(保姆级分析)

2020-08-19 11:06 106 查看

引言:

之前去西安某游戏公司面试前端开发岗位,考了我一道赛马题,当场没想出来,面试也就顺理成章的凉凉。

回家之后,我仔细研究了一下,结合网络上的一些思路,梳理出来一个目前个人认为的最优解,但不知道会不会存在更少的情况。

本文就结合这道题目,分享一下我个人解此题的一个详细思路,用图文的形式去呈现。

题目要求:

现有64匹马,赛场上有8条跑道(一场最多赛8匹)。问,在不用计时器的情况下,最少情况下,赛多少场能够找到最快的4匹。如图:

 

 

分析:

根据题意,我们可以很轻松想到,64匹马能够排成8*8的方阵(一共8组,每组8匹)。

刚好每组8匹刚好占满8个跑道,不构成浪费。

无论怎样,至少每匹马都得参加比赛,有参考依据,才有可能得出结论。

1.第一步:(8场)

如上述分析,将64匹马随机分成8组,每组8匹,让它们跑去吧。

这样我们至少可以得出每一组的排名,这里为了不混淆,组统一用ABCDEFGH表示名次用12345678表示

现在我们知道每一组的排名,但不能轻易下结论。极端情况下,A组的8匹有可能是最快的8匹,B组的第1也许很快,但比起A组第8,仍然是难以望其项背。

这样我们还不能确定具体名次,我们可以让每一组的第1名加赛一场,得出每组按第一升序排列的矩阵

2.第二步:(1场)

如上述,每组第1加赛一场。我们可以按名次排列出一个8*8的矩阵。

如下表所示,A为第1名所在组,B为第2名所在组,以此类推。

 

 

这样下来,A1一定是64匹中的大哥,最快的那匹,我们用土豪金标注。(因为是每组第1中的第1)

而且,E1作为每组第1中的第5,已经不可能在整体前4了,因为A1,B1,C1,D1都比它快,所以EFGH组全部淘汰。(用白色标注)

对于D1而言,是每组第1中的第4,是可能入围的,而且最好名次也是第4,那么D2~D8作为D1的小弟肯定没戏了。

同理,对C1而言,最好名次也是第3,C2作为C1小弟可以勉强争一下第4,所以C3~C8淘汰。

那么B4~B8以及A5~A8全部淘汰,现在场上只剩下了A1~A4,B1~B3,C1~C2,D1。总共10匹马。用红色标记。如图:

 

3.第三步:(1场,最多2场)

还剩下10匹马,但我们已知A1一定是全场最佳,所以剩下9匹马需要再比一场。

现在只有8个赛道,却有9匹马,看样子是需要让其中一匹马在场下看热闹了。

而这匹马最好选择“边缘人”,也就是在淘汰边缘的,相比较而言D1的位置最为尴尬,ABC组里边的非第1,随时有可能挤掉它成功上位。

所以,选择D1看热闹是最合适不过的了。(因为D1最多拿第4,否则淘汰)

接下来,我们就让A2,A3,A4,B1,B2,B3,C1,C2去跑。

跑完之后,这样我们可以参照C1的名次来判断接下来需要怎么赛。

若C1是本组第4~7名,则整体2~4名和本组前3一一对应,加上A1的第1名,构成前4。(结束)

若C1是本组第3名,则让C2和D1加赛一场,抢第4名。(加赛一场,结束)

若C1是本组第2名,则前4就是A1,C1,C2及D1,C2和D1不必进行季军争夺,怎么争夺都是一个第3一个第4。(结束)

4.第四步:(总结)

结合上述分析,看C1最后一场如果不跑第3就是最少情况,最少需要10场,(8+1+1)。

这仅仅是目前本人认为最少的场次,如果有更犀利的思路,我会积极采纳!

原创地址:https://www.cnblogs.com/ElemSN/p/13528080.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: