BAT 面试题:25匹马,5个跑道,每个跑道最多能有1匹马进行比赛,最少比多少次能比出前3名?前5名?

news/2024/11/8 2:41:47/

写在前面:最近在刷面试题的过程中遇到这么一道题,感觉解读题目的角度很多,这里介绍自己的做法。注意:本文并不是参考答案,只是为大家在面试的时候多提供一条思路,或许可以获得面试官的青睐。

25匹马,5个跑道,每个跑道最多能有 1 匹马进行比赛,最少比多少次能比出前 3 名?前 5名?

1 - 一些假设

同一马匹在任意场次的速度都能保持一致。

2 - 前 3 名分析

  1. 将 25 匹马分为 5 个小组,每个小组跑一场,共 5 场比赛。假设决出的顺序如下图:

    组A组B组C组D组E
    A1B1C1D1E1
    A2B2C2D2E2
    A3B3C3D3E3
    A4B4C4D4E4
    A5B5C5D5E5
  2. 取每个小组的第一名跑一场,假设决出的顺序为 A1 > B1 > C1 > D1 > E1,则 A1 是第一名,剔除掉没有希望进入前 3 的马匹后,排序表变为:

    组A组B组C组D组E
    -B1C1--
    A2B2---
    A3----
    -----
    -----

    容易发现,刚好只剩下 5 匹马,可以在一场比赛跑完。

  3. 结果就是 5 + 1 + 1 = 7 场。

3 - 前 5 名分析

  1. 和前 3 名的分析类似,分成 5 个小组,5 个小组的第一名再跑一场,决出第一名后剔除没有机会进入前 5 的马匹,排序表如下:

    组A组B组C组D组E
    -B1C1D1E1
    A2B2C2D2-
    A3B3C3--
    A4B4---
    A5----

    注意到 B1 是 BCDE 四组中最快的马,但是 B1 和 A 组剩下的马的快慢暂不得知。B1 与 A 组马的顺序将会直接影响接下来需要跑的场次。

  2. 让 A 组剩下的 4 匹马和 B1 跑一场,则可能出现如下结果:

    结果 1结果 2结果 3结果 4结果 5
    A2A2A2A2B1
    A3A3A3B1A2
    A4A4B1A3A3
    A5B1A4A4A4
    B1A5A5A5A5

    容易发现,由于 B1 的特殊性,结果 1 和结果 2 其实已经决出了前 5 的马匹(包括 A1),结果 3 决出了前 4 的马匹,结果 4 决出了前 3 的马匹,结果 5 决出了前 2 的马匹。

  3. 所以最少需要 5 + 1 + 1 = 7 场。(题目到这里就可以结束了)

  4. 结果 1 和结果 2 具有偶然性,出现其他结果时的情况比较复杂,但是考虑到每场都会至少确定 1 个名次,那么实际上最多 5 + 5 =10 场就能确定前 5 。

4 - 拓展

64匹马,8条跑道,决出前4名?

  1. 分 8 组,决出第一名之后剔除不能进入前 4 的马匹,如下:
    组A组B组C组D组E
    -B1C1D1--
    A2B2C2---
    A3B3----
    A4-----
    还剩 9 匹马,一次跑不完。
  2. 笔者的考虑是第 10 场先不安排A4、B3、C2、D1中的某一匹,因为这 4 匹马相对较慢,很大几率不会入选前 4,根据结果来确认是否需要第 11 场。比如,第 10 场 D1 没有上场,如果(速度比 D1 快的)B1 或者 C1 不在前 3,那么 D1 就没有再上场的必要了。反之,若 B1、C1分别是第 2 、第 3 名,那么 D1 还是有机会争一争第 4 的。
  3. 所以按这个思路,最多 11 场,最少 10 场就能确认前 4。

再次强调:本文不是标准答案,请勿擅自曲解笔者意思。最后,祝大家面试顺利~


正文结束,欢迎留言讨论。


http://www.ppmy.cn/news/601446.html

相关文章

【数据结构与算法】4、双向链表(学习 jdk 的 LinkedList 部分源码)

目录 一、双向链表二、node(int index) 根据索引找节点三、clear()四、add(int, E)五、remove(int index)六、双向链表和单链表七、双向链表和动态数组八、jdk 官方的 LinkedList 的 clear() 方法 一、双向链表 🎁 单链表的节点中只有一个 next 指针引用…

4141:砝码称重

#include<iostream> using namespace std; int total0; int dp[1000]; int num[6],sum; int kg[6]{1,2,3,5,10,20}; int main(void){ for(int i0;i<6;i){ cin>>num[i]; sumnum[i]*kg[i]; } dp[0]1; //对于第i种砝码&#xff0c;枚…

java8函数式接口使用详解

在Java8之前&#xff0c;我们通常使用匿名内部类来实现接口的抽象方法&#xff0c;例如&#xff1a; //定义一个接口 interface Greeting {void sayHello(String name); }//使用匿名内部类实现接口 Greeting greeting new Greeting() {Overridepublic void sayHello(String n…

pcie转m2装系统win10_NVMe SSD安装Win10系统详解:小白秒懂

最近有不少小伙伴问我&#xff0c;他们自己买了个PCIe SSD&#xff0c;不知道怎么装系统。如果一个人问还好&#xff0c;但是如果很多人问同样的问题&#xff0c;那某冬索性写个PCIe SSD装系统的教程给大家看好了。 要装系统进PCIe SSD&#xff0c;当然我们得有个PCIe SSD。 这…

硬件篇-配置

写在最前 这已经可以成为垃圾佬配置了。。。 机箱->239元 机箱选用的itx迷你机箱&#xff0c;为了后期nas方便拓展选了4盘位&#xff0c;该机箱还是比较符合我的预期的&#xff0c;颇有种麻雀虽小五脏俱全的感觉&#xff0c;机箱可以安装matx主板和itx主板&#xff0c;还是…

租房小程序源码推荐,让你的租房平台更有竞争力

为租房平台的从业者&#xff0c;你是否也曾为如何提高平台的竞争力而苦恼&#xff1f;租房小程序源码或许是一个不错的选择。 租房小程序源码是一种可以让你快速搭建一个专属的租房平台的工具&#xff0c;可以帮助你快速上线一个符合市场需求的租房平台。相较于从头开始开发一…

nginx超时相关参数

#读取http body的超时时间&#xff0c;单位秒&#xff0c;连接建立后&#xff0c;服务端接收body&#xff0c;规定时间内没收到&#xff0c;则超时&#xff0c;返回给客服端408&#xff08;request time out&#xff09; client_body_timeout 1000; #发送响应超时时间&…

第六章、Linux文件与目录管理

6.1 目录与路径 6.1.1 相对路径与绝对路径 绝对路径&#xff1a;路径的写法“一定由根目录 / 写起”&#xff0c;例如&#xff1a; /usr/share/doc 这个目录。 相对路径&#xff1a;路径的写法“不是由 / 写起”&#xff0c;例如由 /usr/share/doc 要到 /usr/share/man 下面…