25匹赛马得前三名问题求解

有这么一个程序员面试题:有25匹赛马,速度都不相同且都为定值。现在有5个赛道,所以每赛一场只能知道5匹马的相对快慢。问至少赛几场能找出25匹马中速度最快的前三名?(百度2008年面试题)

首先,我们来想一下其实现的逻辑:
    1.五个赛道,那我们将25匹马得分成五组;
    2.首先我们对分好的五组进行比赛,对每组选出名次;  ***赛5场***
    3.我们按照选出的五组的第一名进行比赛,然后按照名次对每组进行排名。 ***赛1场***
    4.这个时候我们就能发现,第一名在第3步中就选出来了,同样的,我们可以以第3部所得出的排序,排除掉所有的3名开外的名次(只要确定有三匹或者三匹以上的马跑得比这匹马快),那我们便知道,在第3步的排序中,第一组的第2,3名,第二组的第1,2名和第三组的第1名都有可能成为所有第2,3名的(第1名是第一组的第1名)。
    选出上面所说的第一组的第2,3名,第二组的第1,2名和第三组的第1名,对其进行比赛,得出的第1名和第2名便是所有马中的第2,3名。   ***赛1场***

由上面的逻辑便可知道,至少赛7场。具体代码实现如下:

1.首先是对25匹马进行分组:

//无序的马的排列,其中数字越小的速度越快
int all_ma[] = {5,2,25,24,20,6,7,8,1,23,22,21,3,19,18,17,16,15,14,13,12,11,10,9,4};
//定义一个二维数组对25匹马进行分组
int A[5][5];
//分组的实现:将所有的马分成5组
for (i = 0;i < 25;i++){if(i>=0&&i<=4){A[0][i] = all_ma[i];}elseif(i>=5&&i<=9){A[1][i-5] = all_ma[i];}elseif(i>=10&&i<=14){A[2][i-10] = all_ma[i];}elseif(i>=15&&i<=19){A[3][i-15] = all_ma[i];}elseif(i>=20&&i<=24){A[4][i-20] = all_ma[i];}}

效果如下:

2.然后对每组进行比赛排序:

//对每组的马进行比赛排序(从小到大,值越小的速度越快)
for(k = 0;k < 5;k++){for(i = 0; i < 5;i++){for(j = 0; j < 5;j++){if(A[k][i]<A[k][j]){m = A[k][i];A[k][i] = A[k][j];A[k][j] = m;
}
}
}
}

效果如下:

3.对每组第一名进行比赛,以此对每组进行排序:

//对五组马的最快的马进行比较,然后对马组进行排序
for(i = 0;i < 5;i++){for(j = i+1;j < 5;j++){if(A[i][0]>A[j][0]){int temp;for(k = 0;k < 5;k++){temp = A[i][k];A[i][k] = A[j][k];A[j][k] = temp;
}
}
}
}

效果如下:

4.选出上面所说的第一组的第2,3名,第二组的第1,2名和第三组的第1名,对其进行比赛排序

//将最快的三组的(第一组的2,3名,第二组的1,2名,第三组的第1名)比赛得出第二和第三名
int B[] = {A[0][1],A[0][2],A[1][0],A[1][1],A[2][0]};for(i = 0;i < 5;i++){for(j = 0;j < 5;j++){if(B[i]<B[j]){m = B[i];B[i] = B[j];B[j] = m;
}
}
}

这个时候前三名便产生了:

printf("******前三名产生****** \n");
printf("第一名:%d \n第二名:%d \n第三名: %d \n",A[0][0],B[0],B[1]);

在这里主要用到的C技巧有:

1.轮询方式实现比赛(数组下的值的比较):

for(i = 0;i < 5;i++){for(j = 0;j < 5;j++){if(B[i]<B[j]){//……
}
}
}

2.值的交换:

    m = B[i];B[i] = B[j];B[j] = m;

3.数组的交换:

    int temp;for(k = 0;k < 5;k++){temp = A[i][k];A[i][k] = A[j][k];A[j][k] = temp;
}

25匹赛马得前三名问题求解相关推荐

  1. 赛马-25匹马选出前三名问题

    题目: 25匹马,速度都不同,但每匹马的速度都是定值.现在只有5条赛道,无法计时,即每赛一场最多只能知道5匹马的相对快慢.问最少赛几场可以找出25匹马中速度最快的前3名? 答案: 25匹马分成5组,先 ...

  2. 25匹马,5个跑道,每次只能5匹马跑,问最少几次得到跑的最快的3匹马

    正确答案: 7 场. 推理过程: 你可以先询问面试官,「最快」的意思,是不是指比赛时总能赢?在真实情况下并非如此.但倘若你假设, A 在比赛中跑赢了 B , A 就无可争议地跑得更快,这就极大地简化了 ...

  3. 赛马比赛:25匹马,5个赛道,选出跑的快的前几匹

    package mainimport ("fmt""math/rand""sort" )// 赛马 //@题目:有25匹马,5个赛道,选出跑 ...

  4. 25匹马,5个跑道,最少需要比赛多少场就能决出前三名

    这是我一个搞Java的朋友当面试官时出的题,回来他问我,我自己想了想,后来在网上看到很多相关的介绍,于是自己也想写一个,如果哪里写的不对,大家多见谅 其实这个题并不难,就是一个类似奥数题,需要我们去做 ...

  5. 【算法】25匹马,每次最多赛5匹,最少几次可以赛出前三名?

    答案是7次 第一步 将25匹马平均分五组,分别比赛,然后淘汰掉每组的第四第五名,每个组剩下3匹马. 第二步 将剩下五个组的第一名拉出来赛跑,排名为第四名和第五名所在的整个组淘汰,这样还剩3个组,每个组 ...

  6. 25匹马,5个跑道,最少比几次可以得出跑得最快的前三匹吗?

    算法思路: 首先将25匹马分成5个小组,分别为A, B, C, D, E,比赛次数5次: 每个小组都分别进行比赛,分别得到前两名,分别为A1,A2, B1, B2, C1, C2, D1, D2, E ...

  7. 一个赛马问题 25匹马5个赛道,每个赛道每次只能跑一匹马,问需要跑几次,能求出跑得最快的三匹马。...

    肯定 7 次 25匹马先设5组:假设A,B,C,D,E五组 跑5轮后选每组前3名进下一轮 每组第一名比赛一轮(第6圈)得出第一名(假设A1)第二名(假设B1)第三名(假设C1) 从(第6圈)第一名组中 ...

  8. 面试:25匹马,5个赛道,选出前三,最优解

    这个题很多人在没看过的情况下突然被面试官问及可能耗时较久,最近面试遇到了这个题,结合网上答案讲总结一下 第一步:25匹马分别编号 A1,A2,A3,A4,A5 B1,B2- 每一组进行比试进行排序,每 ...

  9. 面试思考题:25匹马5条跑道选前三

    今天第一次面试,腾讯微众银行的web开发岗,除了深刻地认识到自己是个铁five之外,也算是积累了面试经验吧.面试官人还挺好的,看我菜也没有说啥(甚至还安慰我说我还行),面试官最后给我出的那道思考题还是 ...

  10. BAT 面试题:25匹马,5个跑道,每个跑道最多能有1匹马进行比赛,最少比多少次能比出前3名?前5名?

    写在前面:最近在刷面试题的过程中遇到这么一道题,感觉解读题目的角度很多,这里介绍自己的做法.注意:本文并不是参考答案,只是为大家在面试的时候多提供一条思路,或许可以获得面试官的青睐. 25匹马,5个跑 ...

最新文章

  1. 一种巧妙的drawable.xml替代方案
  2. Delphi xe5 编译报environment.proj错误的解决
  3. Cut and Paste(模拟)
  4. pata1015_ATA / PATA的完整形式是什么?
  5. 2021-2022元宇宙报告:化身与智造,元宇宙座标解析
  6. html5-table布局
  7. 网页java插件加载不了_win10系统浏览网页时无法加载java插件如何解决-系统城...
  8. 惠普无线打印机服务器进不去,连接您的HP无线打印机 | 无线打印中心 | 惠普中国...
  9. 双十一数码产品选什么好?双十一数码好物推荐
  10. 支配集(dominating set)问题是NP完全问题的一个证明
  11. ID卡线圈和IC卡线圈的区别
  12. 怎么把png格式图片转换成jpg格式?
  13. c语言共阴极数码管数字6,用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF,六个数码管是连续不同的六个数?...
  14. Service的绑定过程
  15. Painter X Liquid Ink(液体墨水)画笔
  16. 【完结】囚生CYの备忘录(20221121-20230123)
  17. ISCSI的target和initiator的部署
  18. FastDFS清空数据及文件步骤
  19. 研究google搜索框代码
  20. You are using pip version 8.1.2, however version 21.3.1 is available pip安装docker-compose版本问题解决

热门文章

  1. 家用安防系统与服务器,上饶家庭安防监控系统
  2. python单位根检验看结果_python做adf检验
  3. FPGA蜂鸣器演奏音乐
  4. 全面设防 让广播风暴远离局域网
  5. 眼镜商城开发,让眼镜世界更丰富
  6. app上架小米应用商店流程
  7. 首度亮相服贸会,亚马逊云科技如何演绎“大象起舞”?
  8. 小米无线路由器服务器用户名和密码忘了,小米路由器管理密码忘记了怎么办?...
  9. Linux查看当前时间
  10. 用java判断是否是合法邮箱即验证邮箱格式