入门级:81匹马,9个赛道,不计时,最少要赛几场可以求出最快四匹马?
首先:分为9组分别进行比赛后得到每一组的比赛名次,比赛场次:9;
然后:将9组的每组第一名比赛,得到第一名,肯定是所有马的第一名;比赛场次:1
最后:剩下马中有资格角逐前四名的马有A2、A3、A4、B1、B2、B3、C1、C2、D1,刚好有9匹马,在进行一场比赛就可以了,比赛场次:1

所以最少进行11场比赛。

提高级:问题是这样的:一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少 得比多少场才能知道跑得最快的5匹马。
注意: "假设每匹马都跑的很稳定" 的意思是在上一场比赛中A马比B马快,则下一场比赛中A马依然比B马快。
稍微想一下,可以采用一种 竞标赛排序(Tournament Sort)的思路。 见《选择排序 》
(1) 首先将25匹马分成5组,并分别进行5场比赛之后得到的名次排列如下:
              A组: [A1 A2 A3   A4 A5]
              B组: [B1 B2 B3   B4 B5]
              C组: [C1 C2 C3 C4 C5]
              D组: [D1 D2 D3 D4 D5]
              E组: [E1 E2 E3   E4 E5]
      其中,每个小组最快的马为[A1、B1、C1、D1、E1]。
(2) 将[A1、B1、C1、D1、E1]进行第6场,选出第1名的马,不妨设 A1>B1>C1>D1>E1. 此时第1名的马为A1。
(3) 将[A2、B1、C1、D1、E1]进行第7场,此时选择出来的必定是第2名的马,不妨假设为B1。因为这5匹马是除去A1之外每个小组当前最快的马。
(3) 进行第8场,选择[A2、B2、C1、D1、E1]角逐出第3名的马。
(4) 依次类推,第9,10场可以分别决出第4,5名的吗。
因此,依照这种竞标赛排序思想,需要10场比赛是一定可以取出前5名的。
仔细想一下,如果需要减少比赛场次,就一定需要在某一次比赛中同时决出2个名次,而且每一场比赛之后,有一些不可能进入前5名的马可以提前出局。 当然要做到这一点,就必须小心选择每一场比赛的马匹。我们在上面的方法基础上进一步思考这个问题,希望能够得到解决。
(1) 首先利用5场比赛角逐出每个小组的排名次序是绝对必要的。
(2) 第6场比赛选出第1名的马也是必不可少的。假如仍然是A1马(A1>B1>C1>D1>E1)。那么此时我们可以得到一个重要的结论:有一些马在前6场比赛之后就决定出局的命运了(下面蓝色字体标志出局)。
     A组: [A1  A2  A3   A4  A5]
     B组: [B1  B2   B3   B4  B5 ]
     C组: [C1  C2  C3   C4  C5 ]
     D组: [D1 D2  D3   D4  D5]
     E组:  [E1  E2  E3    E4  E5 ]
(3) 第7场比赛是关键,能否同时决出第2,3名的马呢?我们首先做下分析:
     在上面的方法中,第7场比赛[A2、B1、C1、D1、E1]是为了决定第2名的马。但是在第6场比赛中我们已经得到(B1>C1>D1>E1),试问?有B1在的比赛,C1、D1、E1还有可能争夺第2名吗? 当然不可能,也就是说第2名只能在A2、B1中出现。实际上只需要2条跑道就可以决出第2名,剩下C1、D1、E1的3条跑道都只能用来凑热闹的吗?
     能够优化的关键出来了,我们是否能够通过剩下的3个跑道来决出第3名呢?当然可以,我们来进一步分析第3名的情况?
     ● 如果A2>B1(即第2名为A2),那么根据第6场比赛中的(B1>C1>D1>E1)。 可以断定第3名只能在A3和B1中产生。
     ● 如果B1>A2(即第2名为B1),那么可以断定的第3名只能在A2、B2、C1 中产生。
     好了,结论也出来了,只要我们把[A2、B1、A3、B2、C1]作为第7场比赛的马,那么这场比赛的第1,2名一定是整个25匹马中的第2,3名。
     我们在这里列举出第7场的2,3名次的所有可能情况:
     ① 第2名=A2,第3名=A3
     ② 第2名=A2,第3名=B1
     ③ 第2名=B1,第3名=A2
     ④ 第2名=B1,第3名=B2
     ⑤ 第2名=B1,第3名=C1
(4) 第8场比赛很复杂,我们要根据第7场的所有可能的比赛情况进行分析。
      ① 第2名=A2,第3名=A3。那么此种情况下第4名只能在A4和B1中产生。
           ● 如果第4名=A4,那么第5名只能在A5、B1中产生。
           ● 如果第4名=B1,那么第5名只能在A4、B2、C1中产生。
           不管结果如何,此种情况下,第4、5名都可以在第8场比赛中决出。其中比赛马匹为[A4、A5、B1、B2、C1]
      ② 第2名=A2,第3名=B1。那么此种情况下第4名只能在A3、B2、C1中产生。
           ● 如果第4名=A3,那么第5名只能在A4、B2、C1中产生。
           ● 如果第4名=B2,那么第5名只能在A3、B3、C1中产生。
           ● 如果第4名=C1,那么第5名只能在A3、B2、C2、D1中产生。
           那么,第4、5名需要在马匹[A3、B2、B3、C1、A4、C2、D1]七匹马中产生,则必须比赛两场才行,也就是到第9场角逐出全部的前5名。
      ③ 第2名=B1,第3名=A2。那么此种情况下第4名只能在A3、B2、C1中产生。
           情况和②一样,必须角逐第9场
      ④ 第2名=B1,第3名=B2。 那么此种情况下第4名只能在A2、B3、C1中产生。
           ● 如果第4名=A2,那么第5名只能在A3、B3、C1中产生。
           ● 如果第4名=B3,那么第5名只能在A2、B4、C1中产生。
           ● 如果第4名=C1,那么第5名只能在A2、B3、C2、D1中产生。
            那么,第4、5名需要在马匹[A2、B3、B4、C1、A3、C2、D1]七匹马中产生,则必须比赛两场才行,也就是到第9场角逐出全部的前5名。
        ⑤ 第2名=B1,第3名=C1。那么此种情况下第4名只能在A2、B2、C2、D1中产生。
            ● 如果第4名=A2,那么第5名只能在A3、B2、C2、D1中产生。
            ● 如果第4名=B2,那么第5名只能在A2、B3、C2、D1中产生。
            ● 如果第4名=C2,那么第5名只能在A2、B2、C3、D1中产生。
            ● 如果第4名=D1,那么第5名只能在A2、B2、C2、D2、E2中产生。
             那么,第4、5名需要在马匹[A2、B2、C2、D1、A3、B3、C3、D2、E1]九匹马中产生,因此也必须比赛两场,也就是到第9长决出胜负。
总结:最好情况可以在第8场角逐出前5名,最差也可以在第9场搞定。

N*N匹马,N个赛道,求出最快N匹马的解法相关推荐

  1. 经典面试题:64匹马,8个赛道,找出前4名最少比赛多少场?

    第一步:全部马分8组,各跑一次,然后淘汰掉每组的后四名(8次): 此时,只有列上有大小关系,行上是没有大小关系的. 最少10次选出前四,最多11次选出前四 在以上的两次比赛过后可以得出,A1 直接晋级 ...

  2. 64匹马,8个赛道,找出前4名最少比赛多少场?

    结论:最少10次,最多11次 第一步 全部马分8组,各跑一次,然后淘汰掉每组的后四名.这里需要8次. 第二步 取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马.这里需要1次. 其实这时候深色区 ...

  3. 腾讯面试:赛马问题【超详细图解】64匹马,8个赛道,找出前4名最少比赛多少场?

    目录 常规思路 正确答案解析 第一轮:8场 第二轮:1场 第三轮:1场或2场 总结 引子:在面试大厂时,怎么也没想到会考我一道脑筋急转弯. 问题:有64匹马和8条跑道,每次只允许最多8匹马同时比赛(假 ...

  4. 【大厂智力题】64匹马,8个赛道,找出前4名最少比赛多少场?

    如果能计时,果断8场, 然并卵,事情没有那么简单:不能计时. 那就老老实实分析. 首先将马分成八组,赛八场,每场后四名淘汰了. 然后将八组中,每组跑得最快的马进行比赛,淘汰后四名的组. 这个时候剩下四 ...

  5. 64匹马,8个赛道,找出跑得最快的4匹马(面试题详解)

    首先,可以将马分为8组,每组各跑一次,然后淘汰掉后四名,这里淘汰后四名是因为只需要跑的最快的四匹马. 然后取8次跑的第一名进行比赛,然后淘汰掉后四名所在的组的所有马,因为,后四名所在的组的第一名没有跑 ...

  6. 64只马,8个赛道,选出最快4只马

    [引导性,看到图片请思考,不要着急下滑哦] 64/8 = 8 32/8 = 4 16/8 = 2 8/8 = 1 8 + 4 + 2 + 1 = 15 次 再思考一下呀? 找出前4名. 第一步:前面的 ...

  7. 64匹马,8赛道,找出跑得最快的4匹马,至少比赛9场

    遇到这种问题, 首先先不要尝试思考具体的方式, 先用算法找上下限, 接下来不断通过验证和分析去缩短已经确定的上下限(因为你的上下限计算方式可能不对). 这里先给一个简单的题: 4个矿泉水瓶可以换一瓶矿 ...

  8. 面试题:25匹马最快3匹及扩展

    描述: 在25匹马里,只有五条赛道,在没有计时工具的情况下,选最快的三匹?  (只能得出相对快慢) 两个扩展: 最快5匹呢, 有30匹马呢 1. 基本思路(找最快3匹马) 先确定第一名(用6场): 分 ...

  9. 【智力问题】25匹马赛跑,每次只能跑5匹马,最快能赛几次找出跑得最快的3匹马?赛跑不能计时,并假设每匹马的速度是恒定不变的。...

    答案是7次. 1. 首先将25匹马分成5组a.b.c.d.e进行比赛.比赛的次数就是5次.得到每组的第一名,分别编号a1,b1,c1,d1,e1. 2. 然后我们将每组的第一名进行比赛,得出结果.假设 ...

最新文章

  1. [Day9]面向对象
  2. 2019牛客暑期多校训练营(第八场)
  3. php中pandans,Python地信专题 | 基于geopandas的空间数据分析-文件IO篇
  4. windows安装 Git Large File Storage大文件下载工具ge
  5. Linux基础学习六:Nginx的使用教程
  6. HexorBase 登陆、执行语句、数据库帐号密码破解
  7. oracle 11g的启动和关闭
  8. drools 7.x 领域语言dsl详细语法
  9. php 修改json数组的值,php – 无法通过str_replace更改JSON数组中的值
  10. Electron入门——代码压缩与打包exe文件
  11. Protocol Buffer编译器安装
  12. 小啊呜产品读书笔记001:《邱岳的产品手记-03》第04+05讲 如何当好AI时代的产品经理 06讲 产品案例分析·TheGuardian的文本之美
  13. 华为路由器静态路由协议配置
  14. 【已失效】免翻在Chrome上使用新必应(New Bing)聊天机器人
  15. 字符串库函数(1)Strlen,strcpy,strcat,strcmp
  16. 积沙成塔,积水成渊是什么意思
  17. js中无区别分割中英文逗号的字符串成为数组
  18. 我认为还是得学会自己焊接贴片元件,有专门的贴片元件焊接练习板,虽然有SMT,就像无人机要练习飞自稳一样。我们不能什么都靠SMT
  19. 07 面向对象编程-结构、封装、继承、多态、接口
  20. tomcat java 参数乱码_【java】怎样解决tomcat中get提交中文参数为乱码的问题

热门文章

  1. java okhttp https_OkHttp是否支持接受自签名SSL证书?
  2. 干货收藏 | 如何优化前端性能?
  3. 人工智能、物联网和大数据如何拯救蜜蜂
  4. 千亿级流量来袭,如何用硬件加速技术为CPU减负?
  5. 游戏光线追踪往事:十年技术轮回
  6. 使用pv命令限制SQL文本导入速度
  7. 程序员——令人喷饭的代码注释
  8. SQL基础【十三、通配符】
  9. ORACLE 11g 自动内存管理
  10. undo表空间暴长,如何取消自动扩展