博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跑马问题--36匹马,跑道每次最多只能有6匹马进行比赛,最少进行多少次比赛能比出前3名?
阅读量:4092 次
发布时间:2019-05-25

本文共 1642 字,大约阅读时间需要 5 分钟。

目录


 

一、36匹马赛跑,跑到同时只能容许6匹马。而且36匹马速度不同,但是每次跑的速度恒定。问跑多少次可以选出第一、第二、第三名?

36匹马赛跑,跑到同时只能容许6匹马。而且36匹马速度不同,但是每次跑的速度恒定。问跑多少次可以选出第一、第二、第三名?

A. 7    B. 8    C. 9    D. 12

可以分三步走。

(1)第一步,将36匹马分成6组,1次跑一组,跑6次。分别得到每组的排名。
A1, A2, ..., A6;
B1, B2, ..., B6;
C1, C2, ..., C6;
D1, D2, ..., D6;
E1, E2, ..., E6;
F1, F2, ..., F6
(2)第二步,让每组的第一名在一起跑一遍,取前三名(假设还是A1, B1, C1)
那么,A1肯定是整体的第一名
(3)第三步,
有可能成为整体第二的马为A2, B1
有可能成为整体第三的马为A3, B2, C1,一共5匹马,让这5匹马一起跑一遍,
选出前两名,就分别是整体的第二名、第三名
因此,总共需要6 + 1 + 1 = 8次,答案选B.

 

二、25匹马,5个跑道,每个跑道最多能有1匹马进行比赛,最少比多少次能比出前3名?前5名?

这道题也有类似的变形:25匹马,5个跑道,每个跑道最多能有1匹马进行比赛,最少比多少次能比出前3名?前5名?

其答案可以参考下面这个人的,总结的比较好。

在此,我也做下总结。

1、前三名的解题思路

将25只马分成五组,每组比赛一次,总共比赛5次。得到每组的排名结果如下(假设每组的排名为A1->A2->A3->A4->A5)。也就是得到5个有序数组。

将五组的第一名放到一起比赛1次,得到第一名为A1(假设排名为A1->B1->C1->D1->E1),也就是整体的第一名。

此时整体的第二名、第三名的范围就在“从A1出发,长度在3以内的路径中”,如下图所示,也就是A2、A3、B1、B2、B3、C1。将它们放在一起比赛1次,就可以知道整体的第二名、第三名了。

因此,总共需要5+1+1次比赛。

2、前五名的解题思路

思路一:

先通过分组得到5个有序数组(5次比赛)。

接下来采取Merge操作(归并操作),将5个指针分别指向5个有序数组的第一个数字(5个分组各自的第一名),将五个指针所指向的放到一起比赛1次,得到当前第一名,同时将第一名的指针向右移动一位。重复刚才的操作5次,不断得到“剩余的马中的第一名”(5次比赛)。

因此,总共需要5+5次。

 

思路二:参考 

还是先通过分组得到5个有序数组(5次比赛)

找到五个分组第一名中的整体第一名(1次比赛)

将B1与A2、A3、A4、A5进行一次比赛(1次比赛),根据B1在其中的排名,来决定是否需要对后面4组进行比赛。这是因为,B1是后面4组的最大值,如下图所示。

如果是[A2, A3, A4, A5, B1],则无需再比,第二到第五名分别是A2-A5,总共需要7次比赛;

如果是[A2, A3, A4, B1, A5],无需再比,第二名到第五名分别是A2, A3, A4, B1,总共需要7次比赛;

如果是[A2, A3, B1, A4, A5],此时确定了第二名到第四名(A2, A3, B1),A4不一定是第五名,因此需要对[A4, B2, C1, D1, E1]再进行一次比赛,总共需要8次比赛;

如果是[A2, B1, A3, A4, A5],此时确定了第二名、第三名(A2, B1),最差情况下需要进行两次归并操作,也就是再进行2次比赛,因此需要9次比赛;

如果是[B1, A2, A3, A4, A5],此时只能确定第二名为B1,对于第三、第四、第五名,最差情况下需要进行3次归并操作,也就是3次比赛来确定,因此需要10次比赛。

因此,总共需要7到10次比赛。

这种思路有点类似于【剑指offer  二维数组中的查找】,利用元素之间的有序性和相对大小,来缩小搜索范围,起到一个“剪枝”的作用。 

 

转载地址:http://rfnii.baihongyu.com/

你可能感兴趣的文章
乐视视频 App 图标改为“欠 122 亿”,网友:我在别家分红包,却在你家随份子!...
查看>>
乔布斯18岁求职信拍卖价22.24万美元,值吗?
查看>>
为何程序员总喜欢写技术博客,看完恍然大悟...
查看>>
假如计算机是中国人发明的,那代码应该这么写
查看>>
科技公司最爱的 50 款开源工具,你都用过吗?
查看>>
触目惊心:比特币到底消耗了多少能源?
查看>>
面试官:简历上敢写技术精通?那我就不客气了!
查看>>
如何判断一家互联网公司要倒闭了?
查看>>
想快速上手机器学习?来看下这个 GitHub 项目!
查看>>
GitHub 标星 3.6k,一本开源的深度学习中文教程!
查看>>
9 款你不能错过的 JSON 工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
200页!分享珍藏很久的Python学习知识手册(附链接)
查看>>
程序员之神
查看>>
4 岁小女孩给 Linux 内核贡献提交
查看>>
推荐几个私藏很久的技术公众号给大家
查看>>
20 个 2020 年软件开发趋势预测
查看>>
王垠受邀面试阿里 P9,被 P10 面跪后网上怒发文,惨打 325 的 P10 赵海平回应了!...
查看>>
Python 趣味打怪:147 段简单代码助你从入门到大师
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>