腾讯面试题:64匹马,8个跑道,选出最快的四匹马

题目描述

64匹马,8个跑道,需要赛多少场,选出最快的四匹马?

题目分析

题目本身是含义不清楚的,但是既然是程序员面试题,隐含条件是:

1、不能计时;

2、在最坏的情况下,至少多少轮比赛,必然能选择出最快的4批马?

求解过程

第一步(前8场),64匹马分成 8组,每组8匹,淘汰每组的后四名(8场

如下图: 

                 

结果:

                 

第二步(第9场),取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马第四名所在组后三匹、第三名所在组的后两匹以及第二名所在组的最后一匹(1场),最终剩余下图中的蓝色A1(总冠军)以及深黄色区域(9匹)角逐总亚军,总季军,总第四名,如下图:

              

                

第三步(第10场),只要从上面的9匹马中找出跑得最快的三匹马就可以了,选择第二步中前三名所在的剩余马 8 匹(下图中红色框框)进行比赛(1场),可能出现两种情况:

  • 若B1的名次为 3 或者 4,那么本次比赛的前三名就是总亚军,总季军,总第四名(最好10场选出最终结果)
  • 若B1的名次为 1或者 2,那么还需要进行一场比赛

                            

 

第四步(第11场),两种情况

  • 若第10场B1的名次为 1(可以排除第一组的第四名A4),那么就让下图一红框中的7匹马角逐:

                                      

本场比赛前2名就是总季军,总第四名

  • 若第10场B1的名次为 2,说明第10场的第一名师总亚军(可能是A2,A3,A4),那么说明A2是第二名,而A4,B3,C2,D1都不可能是前4名(淘汰掉),只需要剩下C1,B2,A3这3匹马角逐总第四名就可以了

                                     

最好情况10场 ,最坏11场角逐总前4名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值