B3真题
64匹马,8条赛道,找出前4名,最少多少场?
好了,逻辑算法问题,考验逻辑思维能力的时候到了!!
情况分析1:计时赛
根据题目,我们很快发现,这个题目其实是“发散”的,没有一堆“条条框框”。
好吧,那我们就“聪明”一点,假设是“计时赛”!
很好,64匹马,8条赛道,所以按照时间最快的4匹马只需要8场比赛~
很明显,腾讯的大厂不可能这么沙雕吧?!所以在不排除这种情况的前提下,一定要考虑“不计时审判”的解决逻辑,这样更符合“大厂气质”~
情况分析1:非计时赛
如果不是计时赛,那显然很复杂,但是越复杂我们越能变聪明,对吧?!
首先,我们利用算法中常用的“分而治之”的思想,将64匹好马驹分成8组,就A、B、C、D、E、F、G、h。
每组8匹,依次编号:A1,A2,A3,以此类推~
然后,准备工作完成,我们开始放马跑。
64匹马,8组,8条赛道。
第一步(* * *跑8次):8组各跑一次,保留每组前4(黄色区域),然后淘汰每组后4(蓝色区域)。
问题:
你为什么在八个组中都淘汰了最后四名?
答:
注意题目,我们只需要跑得最快的前四名,所以每组淘汰后四名,因为前四名绝对不会出现在蓝色区域的马身上!
第二步(* * *跑了1次):取每组的1进行一场比赛,然后淘汰最后4组的所有马。
问题:
为什么每组第1名跑者跑了一次,第4名跑者淘汰后在组里?
答:
正如我们所知,在赛马的第一步之后,我们已经得到了八个小组的排名。
但是8组,哪组更厉害?
我们不知道,所以需要每组的1跑一次,得到8组的组外排名!
假设八组第1名跑者跑完,前四名跑者分别是A1、B1、C1、D1。所以按照要求找到最快的四匹马,而且必须在A、B、C、D,绝对不可能出现在E,因为E、F、G、H中最快的马,E1、F1、G1、H1,都不在前4,剩下的更不可能!
第三步(逻辑分析,不用跑):经过前两步比赛,A1可以晋级!因为它已经是64匹马里最快的了!!
我们只需要找到剩下的三匹最快的马!我们挑了马A1(蓝色),没理它。
灰色地带的六匹马可以直接淘汰!!!
为什么?
仔细听我说!
怀疑:
为什么直接淘汰灰色地带的六匹马?他们做错了什么?
答:
记住,题目要求我们找到最快的四匹马。经过前两步(* * *跑了九次),我们知道A1、B1、C1、D1是八组“组外排名”的前四名。同时,A65438,!
但是,64匹马里最快的2、3、4暂时找不到了!
分析一个波:
最快的第二名可能在哪个范围?
很明显,只有在A2,或者B1!!!
为什么不是A3或者B2或者C1?
你很好!
因为组内最快排名(前四)是A1,A2,A3,A4,组外最快排名(前四)是A1,B1,C1,D1!
所以最快的第二名只能从A2和B1中选!没有别的选择了!!
按照这个逻辑,我们可以继续分析第二名和第四名,可以知道最快的前四名不可能分布在灰色地带,所以我们淘汰了灰色地带的六匹马!
第四步(分类讨论):因为A1是最快的第一名,所以我们挑出来算了!接下来的问题是在A2、A3、A4、B1、B2、B3、C1、C2和D1中找出最快的三匹马。
重点是:因为只有8条跑道,而我们有9匹马!
* *所以,我们保留九匹马中的任何一匹!**
注意:我们留下的马可以分为两类处理:
一种:马有明显比它慢的马!
第二类:这匹马没有明显慢的马!
情况一:离开“头等”马!
假设我们离开B1!(C1,B2明显比它慢)
剩下的八匹马去跑步!
场景1(运行一次):
剩下的8匹马跑完之后,我们发现B2或者C1跑进了前3!在这一点上,左边的B1绝对是最快的top 3!因为B1比B2和C1快!!
于是,我们成功地找到了64匹马中跑得最快的4匹。
场景2(运行两次):
剩下的8匹马跑完之后,我们发现B2或者C1没有跑进前3!
此时只能让B1,A2,A3,A4再跑一次,取前三!!
疑惑:为什么B1,A2,A3,A4又跑了?不是别的?
答:
所以B1用A2,A3,A4运行(注意,为什么不用C1运行,因为B1比C1快,所以不需要运行!)
而且B1比B2和B3快,不用跑,所以B1用A2,A3,A4跑!
情况一:离开“二等”马!
假设我们离开A4!没有一匹马明显比它慢。
剩下的8匹马跑一次,得到一个名次,然后挑第一名,剩下的用A4跑。
这样我们才能拿到最快的前四!!
分析
由此可见,如果我们留下一种马,可能会有一个“最优”的结果,即只需要跑一次就可以得到结果。
而如果离开第二种马,就要两次才能得到结果!!
结果
通过上面的分析,我们再来看题目的要求,我们需要得到“最少多少场?”
第一步8次。
第二步:1次
第三步是0次
第四步:1或2次
那么至少8+1+1 = 10次。
一个看似简单的问题,背后却隐藏着如此复杂的逻辑,“大厂风格”毋庸置疑~
聪明的朋友有更好的解决方法吗?
欢迎分享~ ~!