面试题(算法题)- 找出最快的4匹马

面试题(算法题)- 找出最快的4匹马

题目

现有 64 匹马,8 个赛道,在不计时的情况下,怎么(或者说需要比多少场次)才能找出最快的4匹马?
(先说一下为什么强调不计时。如果计时的话,64匹马,8个赛道,比 8 次,记下每匹马的时间,就可以找出最快的 4 匹马了。)

思路

第一轮:
场次:8 场,将 64 匹马分成 8 组,比 8 场次。
目的:知道每组组内排名,留下每组前四名,淘汰每组后四名一共 32 匹马
结果:64匹 - 32匹 = 32匹。

第二轮:
场次:1 场,将上一轮比完之后的每组第一名,一共 8 匹马进行比赛。
目的:在剩下的 32 匹马中淘汰。
结果:为了方便说明,这一场比完之后按照排名取组名。比如在这一场比赛中排名第一的那一组为第一组,排名第二的那一组为第二组,排名第三为第三组,排名第四为第四组。

淘汰掉 16 匹:淘汰掉这一场比赛中排名后四位的整组成员,因此还剩下 16 匹马;

不用比 1 匹:第一组的第一名就是全场第一名,已经稳了,可以不用比赛,所以还剩 15 匹马。

淘汰掉 6 匹:第二组的第四名可以直接淘汰掉。因为第一名确定之后,第二名,第三名,第四名有可能是第二组的第一名,第二名,第三名。所以第二组排名第四跟全场第四无缘了。同理,直接淘汰掉第三组的后两名。第四组的后三名。还剩下第一组的后三名共 3 匹马;第二组的第一、第二、第三名共 3 匹马;第三组的第一名、第二共 2 匹马;第四组的第一名 1 匹马,一共 3+3+2+1 = 9 匹马了。

第三轮:
场次:1场,最后剩下 9 匹马,只有 8 个赛道,这一场也不得不比了。
目的:留下 1 匹,从 8 匹中找出最快的 3 匹。

第四轮:
场次:1场,找出上一轮中的前三名,加上最后 1 匹马进行比较。
目的:从 4 匹马中找出最快的 3 匹。但是这一轮或者这一场次很有可能不需要比。只有留下的那一匹在历史战绩中比当前的前 3 快,才需要比这一场,否则就不需要。比如留下的是第三组的第二名,但是连第三组的第一名都未经前三,被淘汰掉了。那么这一场就没必要比了。

所以最终的结果是比赛场次最少 8+1+1 = 10 场次,最多 8+1+1+1=11 场次。

发布了252 篇原创文章 · 获赞 2360 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_44135121/article/details/103588376
今日推荐