问题描述
现有36匹马,6个赛道,没有计时器。现在要在36匹马中选出前三名,请问最少需要多少次比赛?
分析
- 根据问题我们可以将36匹马分为6组(如下所示) 这6组每组进行一次比赛。
- 在每组之中选出前三名(因为最快的3匹马可能被分到同一组中)。如下所示:
- 让六组的第一名进行一次比赛,选出前三名所在的组(因为最终的前三名只会出现在这次比赛所在的三组之中),剩下的三组直接淘汰。假如此次比赛的前三名所在组为第一至三组且第一至第三名分别为AH1、BH1及CH1,如下所示:
- 在上次比赛中第一名为AH1(即最终的第一名),接下来要选出最终的二三名。
- 分析第二名可能在哪些马匹中出现:
首先第二名一定不会出现在第三组(因为CH1最好的名次是第三),也不会是BH2(因为BH1最好的名次是第二或第三名),也不会是AH3(因为AH3没有AH2快,最好的名次也就是第三),所以第二名可能从AH2和BH1中产生 - 分析第三名可能在哪些马匹中出现:
在分析第二名时可以得出第三名可能在CH1、BH1、BH2及AH3
- 分析第二名可能在哪些马匹中出现:
- 所以最终要在第一组的三名、第二组的前两名、第三组的第一名(总共六匹马)中选择出最终的前三名
结论
总共需要8(6+1+1)次
关注「CoderPro」公众号,专注于分享.NET/C++知识及算法的大本营,新手公众号请大家多多关照/(ㄒoㄒ)/~~