25人赛跑,跑道每次最多5人,没有计时器,但可以记顺序,怎样用最少的比赛次数选出最快的3个人?

📅 发布时间:2026/8/20 15:23:01
25人赛跑,跑道每次最多5人,没有计时器,但可以记顺序,怎样用最少的比赛次数选出最快的3个人?
目录一. 拆组逐个比赛法12次二. 循环逐个比赛法11次三. 快速排除比赛法7次一. 拆组逐个比赛法12次这个是比较传统的比较思路说白了就是直接分组比较不考虑那么多也是在本子上简单分组就可以想出来的办法第一步 25人分成A、B、C、D、E 组比赛因为要选出前三名所以可以把各组的前三名都筛选出来共15人A1B1C1D1E1A2B2C2D2E2A3B3C3D3E3A4B4C4D4E4A5B5C5D5E5第二步 然后对15人再次进行分组分成三组再比试三轮然后筛选出来之后各组的前三名共9人A1B3D2A2C1D3A3C2E1B1C3E2B2D1E3第三步对9人再分组分成两组仍然取前三名得出6人A1C2A2D2A3D3B3E1C1第四步6个人分成两组5人组继续比较取出前四名和剩余一人重组队比赛选前三名A1E3A2A3C2D2第五步最终决赛选前三名达到目的A1A2A3C2E3总结下来一共比较了 5 3 2 1 1 12 轮。二. 循环逐个比赛法11次程序员在遇到这个问题可能会想到从循环的角度去考虑。第一步因为跑道一次只能跑 5 人而要选出跑得最快的前三名所以可以先分出来 5 人比一轮选出前三位AF,GH,IBJ,KL,MCN,OP,QDR,ST,UEV,WX,Y第二步选出前三位之后剩下还有 20 人分成 2人/组共十组填补到第一轮已经选出来的前三名当中第三步一直循环因为有 10 组共需要循环 10 次加上刚开始的一次共11次在最后一轮比较完记录的前三名就是这 25 人中跑得最快的前三名三. 快速排除比赛法7次我们先回看上方的两种办法其实他们都有一个共同点就是让一部分选手不停地参与到比赛中去一直占用跑道位置在计算机中可以理解为一部分资源一直参与到循环遍历中去。所以会发现上面的两种做法比赛的轮次都很多因此想要降低比赛轮次首先一点就是要减少晋级选手复跑的次数可以考虑使用排除法将一些肯定不能晋级的选手直接排除不在参与后续的遍历赛跑我们仍然分成5组赛跑得到如下结果到了这一步我们首先可以确定各组的前三名最重要的是知道了各组的第一名。因此我们接下来最重要的是让这些人员之间产生关联性并充分利用现有的比赛名次使用少的轮次的出更多的信息。A1第一名B1第一名C1第一名D1第一名E1第一名A2B2C2D2E2A3B3C3D3E3A4B4C4D4E4A5B5C5D5E5所以我们可以将各组的第一名重新组队在比赛第二轮假设A1B1C1胜出D1E1则垫底淘汰。A1第二轮第一名B1第二轮第二名C1第二轮第三名D1passE1passA2B2C2passD2passE2passA3B3passC3passD3passE3passA4passB4passC4passD4passE4passA5passB5passC5passD5passE5pass可以得出以下结论结论一DE两个组的所有人员都跑的慢直接pass结论二C组除了C1其余人员也都被淘汰因为C1前面还有A1B1结论三B组除了B1B2其余人员也都被淘汰因为B1前面还有A1只能再往下数一人结论四A组A4A5淘汰因为前面还有A1A2A3综合以上结论之后再来看表格会发现经过一轮比赛后只剩下 A1、A2、A3、B1、B2、C1 六名选手而且又因为A1既是A组的第一名又是所有组第一名比赛的第一名所以他一定是最快的就不再需要参赛了只需要在剩下的5名选手中选出最快的两名而此时除去A1正好剩余5人直接再比最后一轮从五人中选出前两名所以最终结果就是 A1 A2A3B1B2C1中的前两名就可以知道最快的前三个人