25匹马,5个跑道,最少需要比赛多少场就能决出前三名

这是我一个搞Java的朋友当面试官时出的题,回来他问我,我自己想了想,后来在网上看到很多相关的介绍,于是自己也想写一个,如果哪里写的不对,大家多见谅

其实这个题并不难,就是一个类似奥数题,需要我们去做的就是把这个题分开来做,我们可以把他分成三步去做,就是分别决出第一、第二、第三,然后计算出需要的最少或最多的场次。

  1. 决出第一这个不难,首先就是将这25匹马分成5组赛,每个小组取出其第一名,如下所示:
    A1 A2 A3 A4 A5
    B1 B2 B3 B4 B5
    C1 C2 C3 C4 C5
    D1 D2 D3 D4 D5
    E1 E2 E3 E4 E5
    我们假设A1 B1 C1 D1 E1是每组第一,首先ABDCE最后两名肯定被淘汰,剩下25-5*2=15匹马;场次为5
    然后小组第一再赛一场,假设名次为A1>B1> C1>D1>E1,此时的A1肯定是最快的第一。剩下15-1=14匹马;场次为6
  2. 那么首先D、E两组全部被淘汰,因为最快的D1、E1没进入前三,剩下14-2*3=8匹马
    B组第二名B2必然比A1、B1慢,但是不知道是否比其它未淘汰的马快,所以有可能进前三,B3因为比B2慢,肯定被淘汰,剩下8-1=7匹马
    A组第二名A2只知道比A1慢,A3只知道比A1、A2慢,所以这两匹也有希望进前三;
    因为C2、C3肯定没有C1快,C1最好结果都是第三,所以C2、C3也被淘汰,剩下7-2=5匹马
    因此能角逐第二第三的马有:A2、A3 、B1、B2 、C1正好五匹。

  3. A2、A3 、B1、B2 、C1五匹马赛一场,此时的第二和第三肯定就是最快的第二第三,此时场次为7

  4. 也就是说最少只需要7场就可以赛出最快的前三名,这个题目难就难在第二步,因为在算出第一名以后需要排除很多不相关的数据,而且要根据之前的结果进行重新排序,其实大家画个图或者写一写关系就出来了。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值