问题描述
64匹马,8个跑道,问最少比赛多少场,可以选出跑得最快的4匹马。每场比赛每个跑道只允许一匹马,且不存在并列情形
问题分析
第一步:先让马儿跑起来,首先将马儿分批次赛跑,一共需要进行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
可直接排除各组最后四名赛马,剩余64-4*8=32匹赛马待定
第二步:将每一组中的第一名进行赛跑(如果每一组选多个参加赛马,那样就存在重复比赛),需要进行1次赛跑。假设结果如下:
分组
第一名
第二名
第三名
第四名
第五名
第六名
第七名
第八名
1
A1
B1
C1
D1
E1
F1
G1
H2
可直接排除各组最后四名赛马,也就是后四组全部淘汰,剩余 32 - 4 * 4 = 16,其中第一名已经知道就是A1
需要注意的是:这里还可以继续排除
因为在头名争夺中 D1只能排第四,所以D1最快也是第四,D组剩余被淘汰
同理C组最多只有2名在前4
同理B组最多只有1名在前4
分组
第一名
第二名
第三名
第四名
A
A1
A2
A3
A4
B
B1
B2
B3
B4
C
C1
C2
C3
C4
D
D1
D2
D3
D4
所以剩余需要确认的数量为 16 - 1 - 3 - 2 - 1 = 9。
第三步:剩余的9匹赛马中需要选出8匹马再次进行一次赛马
这里是否有一匹特殊的马,不需要参与赛跑进行这一次赛马就能得出结果?
排除A组中的3匹马中的一匹,那么除非B1都输或者都赢,否则B1以及后面的排名不确定。也就是排除前面的对后面影响较大
排除D1/C2,那么可能无法确认D1与C2谁是第四
排除C1与排除其他一样,可能无法确认自己和它身后的排名
所以,这里最好从D1与C2中排除一个进行赛跑,如果这一轮得出结果,那么就不用跑。如果没有得出结论就再跑一次
因为所有赛马的第一名已经确认是第一,所以剩下的比赛就是确认 2 - 4 名次,C1要是所有赛马的前四名,这次必须跑入前三。
第一种可能:C1第三名或者第三名之后,那么比赛结束,一共经过了 8 + 1 + 1 = 10 赛出前四名
第二种可能:C1排在第二名,也就是说 C2 和 D1 无法确认谁是第四个,那么就需要加赛一场。排除前三,剩余的马再比一场。一共经过了 8 + 1 + 1 + 1 = 11
参考文档
https://zhuanlan.zhihu.com/p/103572219