64匹马,8个赛道,找出前4名最少比赛多少场?——最快10次,最慢11次;

64匹马,8个赛道,找出前4名最少比赛多少场?

答案原创,转载请注明出处:http://www.cnblogs.com/reanote/p/find_4th_in_64horse.html

第一步:全部马分8组,各跑一次,然后淘汰掉每组的后四名(8次);

第二步:取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马(1次):

分析:其实这时候红色区域的马也可以淘汰了,A1可以直接晋级;

第三步:A2、A3、A4、B2、B3、C1、C2、D1八匹马跑一次,即:在剩下需要排名的马中,除了B1外,其它8匹马跑一次(1次)

分类讨论:

1、如果这次排名,B2或C1能进前三名,则加上B1后,B1一定能进前三名,因为B1 排名比B2和C1都要靠前;

到此比赛可以结束了;这种情况8+1+1=10次出结果;

2、如果这次排名,B2或C1不能进入前三名,则需要再进行一次比赛,B1、A2、A3、A4进行,取前三名:

     这种情况8+1+1+1=11次出结果。

ps:至于11次那种情况能不能少,暂时没想到,也没有去进一步证明。

时间: 2024-12-25 20:53:54

64匹马,8个赛道,找出前4名最少比赛多少场?——最快10次,最慢11次;的相关文章

汇编语言-判断素数:找出前100以内的素数

1. 题目:找出前100以内素数. 2. 要求:将前100以内素数找出并显示值,要求每行显示5个素数. 先列出求100以内素数的C++代码 然后根据C++代码写汇编代码,相对来说比较容易. 1 //The program is to find the primes from 1 to 100 with C++ 2 //By Karllen 3 //time: 05/19/2014 4 5 #include <iostream> 6 int main(void) 7 { 8 9 int numb

找出前50最耗CPU的SQL语法

-- 找出前50最耗CPU的SQL语法 SELECT TOP 50 qs.total_worker_time/qs.execution_count as [Avg CPU Time], SUBSTRING(qt.text,qs.statement_start_offset/2, (case when qs.statement_end_offset = -1 then len(convert(nvarchar(max), qt.text)) * 2 else qs.statement_end_of

一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存

Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节.        假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G. 必备知识:什么是哈希表?        哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进

【算法研究】25匹马赛跑,每次只能跑5匹马,最快能赛几次找出跑得最快的3匹马?赛跑不能计时,并假设每匹马的速度是恒定不变的。

答案是7次. 1. 首先将25匹马分成5组a.b.c.d.e进行比赛.比赛的次数就是5次.得到每组的第一名,分别编号a1,b1,c1,d1,e1. 2. 然后我们将每组的第一名进行比赛,得出结果.假设a1>b1>c1>d1>e1.(大于号表示a1比b1快,1表示第一名).在这个地方我们可以推断出,a1是所有马中最快的,所以它是第一名.d1,e1不可能是前三的马,同时这两匹马所在的组也不可能是前三的马.所以排除这两组马,还剩三组15匹马.现在需要找出第二快和第三快的马. 3. 第二名

25匹马的角逐

问题是这样的:一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛.假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少 得比多少场才能知道跑得最快的5匹马. 注意: "假设每匹马都跑的很稳定" 的意思是在上一场比赛中A马比B马快,则下一场比赛中A马依然比B马快. 稍微想一下,可以采用一种 竞标赛排序(Tournament Sort)的思路. 见<选择排序 > (1) 首先将25匹马分成5组,并分别进行5场比赛之后得到的名次排

找出数组前N大的数

这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二:用最大堆的思想. 我暂时只实现了思路一,思路二我之后实现了会补上. 思路一比较简单了.我们先用快排的思想找出第n大的数,然后带上后面n-1个就完事了.因为后面的都比支点数大. 怎么找第n大的数?我在之前的博客写过,请移步到  找第n大的数 代码: #include<stdio.h> #inclu

海量日志数据__怎么在海量数据中找出重复次数最多的一个

问题一:         怎么在海量数据中找出重复次数最多的一个 算法思想:         方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数. 然后找出上一步求出的数据中重复次数最多的一个就是所求(如下). 问题二: 网站日志中记录了用户的IP,找出访问次数最多的IP. 算法思想:       IP地址最多有2^32=4G种取值可能,所以不能完全加载到内存中. 可以考虑分而治之的策略: map 按照IP地址的hash(IP)%1024值,将海量日志

C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置

#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7,2,3,1,6,8,4}; int i=0,j=0; int n = sizeof(a)/4; //外循环n-1轮 for(i=0;i<n-1;i++){ int pos = i;//始终指向最小的位置 for(j=i+1;j<n;j++){ if(a[j]<a[pos]){ pos = j

用最少老鼠数找出7瓶药中的1瓶毒药

原文链接:https://www.jianshu.com/p/607d6683748b https://blog.csdn.net/limitless1113/article/details/46681851 题目如下:现有7瓶药,其中有一瓶毒药,喝了之后1小时后才产生效果,现在你有1个小时的时间,请问找出那瓶毒药最少需要多少只老鼠? 现在有3只老鼠,那么我们以老鼠的死和排序作为一瓶药的编号.例如: 001 代表第一瓶药 010代表第二瓶药 011代表第三瓶药 100.101.110.111一次