赛马

这是我在微信公众号《奇舞周刊》上看到的一个算法题,题目是:64 匹马,8 个赛道,找出前 4 名最少比多少场?(马的速度恒定不变)

1.第一轮,64匹马分成8组,比赛8场

假装终点线-------------------------------------------------------------------

      A组:A1    A2    A3    A4    A5    A6    A7    A8

      B组:B1    B2    B3    B4    B5    B6    B7    B8

      C组:C1    C2    C3   C4    C5    C6    C7   C8

      D组:D1    D2    D3   D4    D5    D6    D7   D8

      E组:E1    E2    E3    E4    E5    E6    E7    E8

      F组:F1    F2     F3    F4    F5    F6     F7    F8

      G组:G1   G2    G3   G4    G5    G6    G7   G8

      H组:H1    H2    H3   H4    H5    H6    H7    H8

给每组胜出的前四名编号,分别是1,2,3,4,即:

  A组:A1    A2    A3    A4

  B组:B1    B2    B3    B4

  C组:C1    C2    C3   C4

  D组:D1    D2    D3   D4 

  E组:E1    E2    E3    E4 

  F组:F1    F2     F3    F4

  G组:G1   G2    G3   G4

  H组:H1    H2    H3   H4

到现在为止,已经进行了8场比赛

第二轮:

把每组的第一名拉出来比赛,一共8名,进入前四名的那一组才有资格留下,给前四名的组编号分别为,他们之间的名次关系为

  A组:A1 > A2 > A3 > A4

       ∨      ∨      ∨      ∨

  B组:B1    B2    B3    B4

       ∨    ∨      ∨     ∨

  C组:C1    C2    C3   C4

     ∨     ∨      ∨     ∨

  D组:D1    D2    D3   D4 

到目前为止一共比赛8+1=9次

根据此图分析,A1稳坐第一名,D1最高排第四名,所以D2,D3,D4根本排不上号,直接淘汰,同理,C3,C4也轮不上,淘汰,B4也没资格,淘汰

我们先把B1放在一边,让剩下的8个再比一次(现在是 8+1+1=10次),现在前四名还剩三个位置,需要把情况分为两种:

  1.前三为A2    A3    A4,那么因为B1未参赛不知道B1和他们三个谁更快,所以还要再进行一次比赛确定前三,才能确定最终的前四名(8+1+1+1=11次)

  2.前三不全是A2    A3    A4,也就是说前三名中有B2  B3  C1  C2  D1中的其中一个,只要有这几个中的任何一个就能确定B1在总前四,因为B1比它们都快,

   那么,如果这次比赛(是 8+1+1=10次)的第三名为B2,那么比B2快的有B1,在A1A2A3中最快的又是A1,所以总前四名已经得出,即:A1  B1  A2  B2,其中B1  A2不能确定谁更快,但已经无所谓了。如果第三名为C1情况也一样(此时前四中不可能有B2,因为B1比B2快),前四为A1  B1  A2  C1。

所以最少要比赛10次才能决定前四名

原文地址:https://www.cnblogs.com/wuyufei/p/11247467.html