从25匹马中选出最快的三/五匹马

前些天看别人的面试题,看到这个题目。一开始没仔细想,后来看了一篇博客,发现之前的想法太简单,并不是最少的

从25匹马中选出最快的三匹马

问:25匹马,5个赛道,没有表和计数器之类的东西,至少跑几次可以找出最快的三匹马?


25匹马分五组,每组按成绩排序,如下:

[ q, w, e, r, t ]
[ y, u, i, o, p ]
[ a, s, d, f, g ]
[ h, j, k, l, z ]
[ x, c, v, b, n ]

第六次:取每组第一名:[ q, y, a, h, x ],比赛一次, 假设按成绩排序是 [ a, q, x, h, y ],则第一名是 a

因为只需要取前三名,第六次比赛时第四名和第五名不在筛选范围内,又因为这两匹马都是小组第一,所以,这两个小组都不在筛选范围内。

[ q, w, e, r, t ]
[ s, d, f, g ]
[ x, c, v, b, n ]

此时,除去 a 之后,目前的筛选范围中,第一组的前两名 [q, w] 和第二组的前两名 [s, d] 都有可能是前三,而 x 最好的结果是第三名

第七次:选择 [q, w, s, d, x] 进行比赛,得到的前两名分别就第二名和第三名

从25匹马中选出最快的五匹马

25匹马分五组,每组按成绩排序,如下:

[ q, w, e, r, t ]
[ y, u, i, o, p ]
[ a, s, d, f, g ]
[ h, j, k, l, z ]
[ x, c, v, b, n ]

第六次:取每组第一名:[ q, y, a, h, x ],比赛一次, 假设按成绩排序是 [ a, q, y, h, x ],则第一名是 a

此时,筛选范围如下:

[q, w, e, r, t]
[y, u, i, o, p]
[s, d, f, g]
[h, j, k, l, z]
[x, c, v, b, n]

第七次:继续取每组第一名:[q, y, s, h, x],假如 q第一,x最后。得前两名 [a, q],并确定最后一名 x 不在前五名范围,该组也就不在筛选范围之内

此时,筛选范围如下:

[w, e, r, t]
[y, u, i, o, p]
[s, d, f, g]
[h, j, k, l, z]

第八次:将第七次比较时的第一名所在组的前两名加入比较范围,再将其他组的第一名加入比较范围,得 [y,h,s,w,e], 假如此时比赛成绩排序:y>h>s>w>e, y第一,w, e最后两名,得前三名 [a, q, y]。因为最后两名不在前五范围,所在小组就不在后续筛选范围

此时,筛选范围如下:

[ u, i, o, p ]
[ s, d, f, g ]
[ h, j, k, l, z ]

第九次:

根据第八次的情况,此时的筛选范围可能是两组也可能是三组

如果是两组的情况:任意取其中一组的前三,和另一组的前二
如果是三组的情况:取第八次比较时第一名所在组的前二,第八次比较时第二名所在组的前二,和第八次比较时第三名。 取出[h, s, u, i, j]进行一轮比赛
=> 假如排序: u>h>s>j>i, u第一 得前五名 [a, q, y, u, h]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值