一个面试题

purples 2004-07-23 12:51:20
25匹马,每次捡5匹跑,几次可找出最快的5匹马?
...全文
1010 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunjueqian 2004-07-24
  • 打赏
  • 举报
回复
啊!顿悟了,刚才是我没看懂,呵呵,不好意思打扰了
sunjueqian 2004-07-24
  • 打赏
  • 举报
回复
Passants兄的算法好像有漏洞啊
第六次次跑过以后,交换了马匹的组,这时候出现了问题,
以第二组为例,B1可能是交换过来的,就不见得是第二组最快的了,这个时候再进行比赛就无法保证,参赛的仍然是每一组最快的了,如果想要保证这一点,需要每一组再重新跑,这样似乎就做了无用功。不知道楼上的几位,所说的“跑一次”是指五组每组各跑一次才算一次,还是指一组次算一次呢?如果是后者,恐怕方法还要斟酌一下。
或者是我的理解有问题,还请高人指点迷津
bidongliang_2000 2004-07-24
  • 打赏
  • 举报
回复
五次,分成五组跑,记录25匹马的速度,排序。
banbool 2004-07-24
  • 打赏
  • 举报
回复
前面的各位真是非常的理性,根本不考虑马的死活,刚比完一场马上就比另一场,就是千里马也要给活活累死,何况还要应付动物保护协会的投诉!
pdcc 2004-07-24
  • 打赏
  • 举报
回复
从题目设计思路来看系统只提供一个处理过程。这个过程描述如下

假设:每匹马的速度在每次比赛过程中不变,同时这个速度不可见。
输入参数:五匹马的列表
处理过程:进行一次比赛
返回值:比赛结果(按照速度快慢排序的五匹马的列表)。

我们现在要求25匹马中跑得最快那五匹,其实就是要求25个数中最大那五个的问题。我们可以看到系统提供的处理其实是一个对五个数进行排序的过程,这就很符合使用5路归并排序。

第一轮归并,可以通过调用五次比赛过程来完成, 得到五个有续序列。
第二轮归并,就不可以仅调用五次比赛过程来完成了。 但有幸的是我们仅需要知道排序后的前五个数。所以五次比赛过程足够得出这五个数

这时候的过程其实跟楼上Passants(路过) 所述一致了。
结果是10次!
volttsky 2004-07-24
  • 打赏
  • 举报
回复
10次的算法不是最少次数的~最少应该跑6次出结果同时可以做到最多应该10次出结果~但是如果光考虑次数的因数,实际加大了算法实现的难度,程序的开销要大很多~
sandlovefree 2004-07-23
  • 打赏
  • 举报
回复
我想让我做,我就分五组,让他们同时在同一起跑线上开妈跑,一次就可以看出来了。
mynamelj 2004-07-23
  • 打赏
  • 举报
回复
谁能用代码描述出来?
sandlovefree 2004-07-23
  • 打赏
  • 举报
回复
我想让我做,我就分五组,让他们同时在同一起跑线上跑,一次就可以看出来了。
梦想成了相扑 2004-07-23
  • 打赏
  • 举报
回复
真是佩服发明的计时器的人啊!!
yifanlxj 2004-07-23
  • 打赏
  • 举报
回复
应该是冒泡排序的一种:
先进行分组排序,然后怎么做记不清了,那是上大不时C语言上的一道题。
Passants 2004-07-23
  • 打赏
  • 举报
回复
回复人: BroncoSpeedCoursing() ( )
一次就可以比较出来,哈哈。
=====================================================

天才,甘拜下风。
  • 打赏
  • 举报
回复
回复人: Passants(路过) ( ) 信誉:100 2004-07-23 13:49:00 得分: 0 楼上的,那让你自己取的话,最快几次呢?
=====================================================
一次就可以比较出来,哈哈。


Passants 2004-07-23
  • 打赏
  • 举报
回复
先分5组
五次赛马后的每组排序如下:

A1 B1 C1 D1 E1
A2 B2 C2 D2 E2
A3 B3 C3 D3 E3
A4 B4 C4 D4 E4
A5 B5 C5 D5 E5

再A1 B1 C1 D1 E1比赛,选出最快的,假设为A1。

再A2 B1 C1 D1 E1比赛,选出第二快的,假设B1。

再A2 B2 C1 D1 E1比赛,选出第三快的……

以此类推

意思就是,后面每次比赛都是每组中最快的那匹参加。

这样的话就是10次。
zhouqingyuan 2004-07-23
  • 打赏
  • 举报
回复
先随便5组跑得A1,B1,C1,D1,E1
然后这5个跑假设最快为A1,
则接下来让A2,B1,C1,D1,E1跑,依次类推,可得
zhouqingyuan 2004-07-23
  • 打赏
  • 举报
回复
的确,最多需要10次就够了!



nobush 2004-07-23
  • 打赏
  • 举报
回复
楼上这么快?

我也认为是10。
purples 2004-07-23
  • 打赏
  • 举报
回复
10怎么出来的?大哥?
sasdaa 2004-07-23
  • 打赏
  • 举报
回复
10
dragoonj 2004-07-23
  • 打赏
  • 举报
回复
5+5
加载更多回复(12)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧