匹马赛跑,1个赛道,每次5匹进行比赛,无法对每次比赛计时,但知道每次比赛结果的先后顺序,最少赛多少次可以找出前三名?

 1.实现

答:至少需要比7次。

  1. 25匹马随机分成5组,每组比赛一次也即总共比5次先看一下每组马的快慢情况。

我们一开始并不知道这25匹马中谁快谁慢,所以需要筛选出那些跑的较快的马出来去竞争前三名,只能将25匹马随机进行分组比赛,然后按照这些马的快慢情况进行排序,同一个字母代表是同一组的马,对应的下标代表他们在该组的排名,下图是我们在比赛5次之后给25匹马做的一个排序

 

按照题目的要求呢,我们只需要找出最快的三匹马就行了,所以在下一次比赛之前,我们可以先把肯定不会被选上的马淘汰掉,因为我们已经知道每组内5匹马的快慢了,现在只有三个名额,跑的最慢的两匹马肯定是可以淘汰掉了,这样一来,我们现在要考虑的范围就是每一组前三快的马,如下图所示

注意:不同组的马我们现在还不知道谁快谁慢,比如A1和B1

 

2.将每组跑的最快的一匹马进行1次比赛,这样我们就可以选出25匹马中跑的第一快的马。

我们现在只知道相同组马的快慢,但是还不知道不同组马之间的快慢关系,所以这一次比赛就是为了在不同组中间挑选出最快的马,还有个目的就是要得到参与比赛中马的排名,这对我们后面缩小比赛范围提供很大的帮助

 

3.虽然现在我们只选好了第一快的马,但是淘汰掉那些没有机会的马后,我们发现最后可能进入前三的马只有5只了,刚好可以用1次比赛找到它们之间的快慢关系,这样在这5匹马中排名第一第二的马恰好就是25匹马中第二第三的马

在A1-E1的比赛当中,我们已经选出了最快的马,这里我们认为A1最快就行,因为无论是哪匹马都不会影响最终的结果,他们的快慢关系姑且认为从快到慢就是A1-E1。我们现在还差第二快和第三快的马没有找出,也就是还有两个名额,那么B1和C1作为上次比赛的二三名还是有机会去争夺25匹马中的第二第三名的,但是D1和E1完全就没有机会了,因为他们落后于B1和C1,于此同时,D1和E1又是它们自己组中跑的最快的马,所以这两组其实就可以完全淘汰掉了

但现在其实还是有需要淘汰的马。由于A2和A3并没有和其它组的马跑过,我们现在只知道A2比A1慢,A3比A2慢,那么A2是有机会竞争到第二快的,A3是有机会竞争到第三快的。B1、C1我们知道的关系就是B1比C1快,但并不知道他们与A2、A3的关系,所以B1是有机会竞争第二快的,C1是有机会竞争第三快的。B2也没有和其它的马比过,只知道它比B1慢,所以B2是可能竞争第三名的。这样一来要淘汰的马就很明确了,B2和C1只有竞争到第三名的机会,那跑的比他们慢的B3、C2和C3肯定是挤不进前三的,直接淘汰掉就行,所以最终我们有几率竞争前三名的马如下图所示

这样一来,将余下的5匹马比赛一次,排名第一的马恰好就是我们要找的第二快马,排名第二的马恰好就是我们要找的第三快马

结果上面的分析,我们发现这题有意思的地方就是,第一快的马是单独比赛一次选出来的,而第二快和第三快的马是在同一场比赛中选出来的,找出最少比赛次数的关键所在就是我们要根据实时的比赛结果淘汰掉不可能有排名的马,从而达到压缩马数量的目的,这样可以让比赛的次数少很多

在网上发现了一种很有意思的解法,可以把最少的次数压缩到第六次,但是不知道符不符合题意:

首先前5轮还是要比的,任选一组的第3名和其他组的第一名进行比赛,如果这组的第三名恰好是这次比赛的第一名,那就意味着这一组对应的前三名就是25匹马中的前三名,这种方法虽然是碰运气,但好像跟题目中的“至少”并不冲突,所以自我感觉面试的时候可以提一嘴。如果题目要求找前5名也是一样的道理。

参考

稀土掘金https://juejin.cn/post/7077545879384637447

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树 — 给定二叉树中某个节点,返回该节点的后继节点

后继节点定义: 二叉树以中序的方式进行遍历打印,节点X的下一个节点,就是X的后继节点。 假设二叉树如下图所示:则中序遍历的后打印出来的就是 4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7。如果X 3,则X的后继节…

直接在Notepad++中运行GO语言-(通过NppExec插件)

前提条件: 1.建议阅读文章【直接在Notepad中运行GO语言】: 直接在Notepad中运行GO语言_go语言 notepad_西晋的no1的博客-CSDN博客 2.建议阅读文章【notepad 中安装NppExec插件】: notepad 中安装NppExec插件_西晋的no1的博客-CSDN博客 以下…

EasyCVR如何在不修改分辨率的情况下进行H.265自动转码H.264?

EasyCVR视频融合平台基于云边端一体化架构,可支持多协议、多类型设备接入,在视频能力上,平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、H.265转码、智能分析以及平台级联等。 我们在此前的文章中介绍过…

微服务框架

流量入口Nginx 在上图中可以看到,Nginx作为整个架构的流量入口,可以理解为一个外部的网关,它承担着请求的路由转发、负载均衡、动静分离等功能。作为一个核心入口点,Nginx肯定要采用多节点部署,同时通过keepalived来实…

Spring 是什么框架?

对于一门技术,我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那在说Spring这三点之前,我们先看Spring之前要学什么。 Java基础、Java语法进阶、MySQL基础操作、MySQL数据库设计和多表操作、JDBC、Maven基础、MyBatis、HMLCSS、JavaScrip…

ESP8266 RTOS SDK开发 windows开发

https://blog.csdn.net/qq_36347513/article/details/105066905 文件下载路径 https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/get-started/windows-setup.html 下载编译环境MSYS2 下载完成后解压到根目录 双击mingw32.exe打开,ls看一下是在什么…

图书推荐管理系统Python,基于Django和协同过滤算法等实现

一、介绍 图书推荐系统 / 图书管理系统,以Python作为开发语言,基于Django实现,使用协同过滤算法实现对登录用户的图书推荐。 二、效果展示 三、演示视频 视频代码:https://www.yuque.com/ziwu/yygu3z/gq555ph49m9fvrze 四、Dj…

89C52RC普中单片机

1.静态数码管显示 数组函数 #include<regx52.h> void Delay(unsigned int xms);//带参延时函数ms /*静态数码管 P0&#xff1a;表示数码管的abcdefg dp P2.234表示位选 P21110 0011是第0号数码管 */ unsigned char NixieTable[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x0…

安卓热修系列-插件资源冲突解决方案

作者&#xff1a;37手游移动客户端团队 背景 在做插件化过程中&#xff0c;宿主需要用到插件的资源&#xff0c;涉及到加载插件的资源&#xff1b; 因为插件是以apk的方式存在的&#xff0c;所以插件的ID和宿主的ID可能导致重复&#xff1b; 为了解决这个问题&#xff0c;需…

【云原生】Docker部署/容器加速器(最新版)

目录 初时Docker和部署 1.什么是Docker 2.容器和虚拟化的区别 3.部署Docker 1.卸载历史版本 2.设置存储库 3.安装Docker最新引擎 4.安装Docker特定安装引擎 1.先查看当前docker-ce都有那些版本 2.替换为所需版本&#xff0c;然后运行以下命令 要安装的命令&#xff1a; 5.启动D…

攻防世界_web

robots 题目描述是这样的&#xff0c;虽然这是一道基础题&#xff0c;但我确实还没有了解过robots协议 第一次知道是被御剑给扫描出来的后台文件 这次直接访问看看 初级题就是初级题&#xff0c;访问后得到提示&#xff0c;如果没做过我估计还不知道该咋整&#xff0c;这也是一…

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论

Linux服务器丢包故障的解决思路及引申的TCP/IP协议栈理论 我们使用Linux作为服务器操作系统时&#xff0c;为了达到高并发处理能力&#xff0c;充分利用机器性能&#xff0c;经常会进行一些内核参数的调整优化&#xff0c;但不合理的调整常常也会引起意想不到的其他问题&#x…