有64辆赛车进行不计时比赛,一共有8个赛道,想要找出最快的四辆车,要至少比赛多少轮?给出你的方案。

题目:

有64辆赛车进行不计时比赛,一共有8个赛道,想要找出最快的四辆车,要至少比赛多少轮?给出你的方案。

很久以前就在朋友圈看有人分享过XX大厂面试题,点进去一看,就是这道题,当时的我年少无知心想就这?没成想算法实验报告就遇上它了,果然大厂面试题诚不我欺。

问题分析

问题中隐含的意思:

  • 只需要找出最快的四辆车,不需要具体的排名。
    淘汰原理:
  • 一辆赛车 在一次比赛中获得名次 n,那他在 64 辆车中最好可能的排名就是 n
  • 任意比赛,只要排名在第五及以后的车,直接淘汰
  • 如果一辆车在一次比赛中获得第四名,那么已知比它慢的车可就都可以淘汰了(包括在其他比赛中得出的结果)

算法设计

先说结果:10轮大概率出结果,11轮一定出结果
1.64进32(共8轮)
将64辆赛车随机分成八组进行比赛,最终每组决出前四名和后四名,则每组的后四名一定不会是最快的四辆车,淘汰每组后4辆,共8组,最终淘汰32辆有64辆赛车进行不计时比赛,一共有8个赛道,想要找出最快的四辆车,要至少比赛多少轮?给出你的方案。_第1张图片

2.32进10(共1轮)
让刚刚八组比赛的每组排名第一的八辆赛车进行比赛。决出前四名与后四名,后四名淘汰。又因为后四名均为每组的第一,则这四组里的车均不可能是最快的四辆车,淘汰每组4辆,共四组,共16辆。
前四名中,对于第二名所在的组来说,已知一定有一辆车比第二组的第一名快,所以前四快的车第二组最多有三辆,则淘汰掉第二组的第四名。同理,已知有两辆车比第三组的第一名快,所以前四快的车第三组最多又两辆,则淘汰掉第三组的第三名和第四名;已知有三辆车比第四组的第一名快,所以前四名最多有一辆来自第四组的车,淘汰掉第四组的二三四名,共淘汰掉D组3辆+C组2辆+B组1辆,共6辆。本轮共淘汰16 + 6 = 22辆,剩余10辆。
有64辆赛车进行不计时比赛,一共有8个赛道,想要找出最快的四辆车,要至少比赛多少轮?给出你的方案。_第2张图片

3.第10轮,可能出结果
有64辆赛车进行不计时比赛,一共有8个赛道,想要找出最快的四辆车,要至少比赛多少轮?给出你的方案。_第3张图片

目前的情况是:还剩10辆车,已知A1是最快的车,不再考虑A1,还剩九辆车。第二快的车,只会在A2和B1中产生,已知B2、B3、C1、C2、D1都比B1慢,不妨暂时先把B1搁置,让B2、B3、C1、C2、D1和A2、A3、A4八辆车进行比赛。在最终结果中,如果是A2、A3、A4包揽前三名,则不能确定最快的四辆车。其他情况,均能确定最快的四辆车。理由如下:

  • 如果前三中只有两辆来自A2、A3、A4(其实一定会是A2、A3,因为A4比他俩慢),一辆来自B2、B3、C1、C2、D1,则最终结果是A1、A2、A3、B1,因为B1比那六辆车快(比A4快是因为刚比完的这轮,A4未进前三,则那五辆车中一定有一辆车比A3快,B1还比那五辆快,所以B1比A4快),A1、A2、A3也比那六辆车快,则最快的四辆车是A1、A2、A3、B1。(上面的顺序不代表最终速度排名,题目中只说需要找出最快的四辆车,不需要确定他们的内部排名,如需要确定排名还需A2、A3、B1加赛一轮)。
  • 如果前三中只有一辆来自A2、A3、A4(一定是A2),则最快的四辆车是A1、A2、B1+本组除A2外排名第一的车。理由与上面类似,用B1代替掉除A2外排名第二的车。
  • 如果前三中没有车来自A2、A3、A4,则最快的四辆车是A1、B1+本组前两名。理由与上面类似,用B1代替掉除第三快的车。

4.第11轮,一定出结果
只有在上面A2、A3、A4包揽前三名的时候,才需要进行第11轮比赛,只需要将A4和B1进行比赛,如果A4胜出,则A1、A2、A3、A4为最快的四辆车,否则,A1、A2、A3、B1为最快的四辆车。(上面的顺序不代表最终速度排名,题目中只说需要找出最快的四辆车,不需要确定他们的内部排名)。
算法over,如果对你有帮助不妨点个赞再走,哪里有疑惑可以在评论区提出~

你可能感兴趣的:(算法,算法)