36匹马,6条跑道问题(C++实现)

问题描述

有36匹马,要在有6个道的跑道上跑,每次最多只能跑6匹,不用计时器,问最少需要跑多少次可以求得最快的三匹马?

C++实现

#include <ctime>
#include <cstdlib>
#include <iostream>
#include <map>
using namespace std;
typedef map<int,int *> IntpIntMap;

//冒泡排序
void bubbleSort(int arr[], int len)
{
    int i , j;
    for (i = 0 ; i < len - 1; i++)
    {
        for (j = 0; j < len - i - 1; j++)
        {
            if (arr[j]>arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

void fun(int arr[])
{
    int i;
    int temp[6];
    IntpIntMap coll;
    IntpIntMap::iterator pos;
    //6*6先分别比赛一次
    for(i=0;i<6;++i)
        bubbleSort(arr+i*6,6);
    /*
        把上面6次比赛的第一名的比赛一遍(map会自动排序),
        并且将其相应的地址放到map中
    */
    for(i=0;i<6;++i)
        coll.insert(make_pair(arr[i*6],arr+i*6));
    /*
        将本次第一的,开始前三的放到temp数组中
        将本次第二的,开始前二的放到temp数组中中
        将本次第三的,开始前一的放到temp数组中中
    */
    for(pos=coll.begin(),i=0;pos!=coll.end();++pos,++i)
    {
        if(0==i)
        {
            temp[0]=pos->second[0];
            temp[1]=pos->second[1];
            temp[2]=pos->second[2];
        }
        if(1==i)
        {
            temp[3]=pos->second[0];
            temp[4]=pos->second[1];
        }
        if(2==i)
            temp[5]=pos->second[0];
    }
    //将temp数组排序,打印出前三的
    bubbleSort(temp,6);
    printf("%d %d %d\n",temp[0],temp[1],temp[2]);
}

int main()
{
    int arr[36];
    int i;
    for(i=0;i<36;++i)
    {
        arr[i]=rand()%1000;
        printf("%d\t",arr[i]);
    }
    printf("\n\n");
    fun(arr);
}
时间: 2024-10-21 02:35:52

36匹马,6条跑道问题(C++实现)的相关文章

36.百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问有大中小马多少匹,共有多少组解?

//1.先确定变量关系,将问题分为3个维,用for语句嵌套搭建循环框架 //2.内层用判断语句确定满足题目的条件 //注意,设置一个变量用于计数 ?#include<iostream> using namespace std; int main() { int m=0; for(int i=1;i<=100;i++) { for(int j=1;j<=100;j++) { for(int k=1;k<=100;k++) { if((((i+j+k)==100))&&a

25匹马的角逐

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

图解25匹马的选马问题

题目一:对于25匹马,有一个赛场,赛场有5个跑道,不使用计时器(也就是每次比赛只得到本次的比赛的顺序),试问最少比多少场才能选出最快的三匹马? 思路: 0)前5场:这个题相对比较简单,25匹马至少要全部参加比赛,所以把25匹马分成5组进行比赛.这样我们就可以得到比赛结果如下: 1)选整体第1名:现在我们要选整体第一名,可能成为整体第1名的马匹为:{A1.B2.B3.B4.B5},那么第6场比赛为[A1,B1,C1,D1,E1] 比赛结果:第6场得到整体第1名 2)选整体第2.3名:根据矩阵关系,

25匹马最少多少次可以选出前3

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/45887395 http://www.llwjy.com/blogdetail/208a6ac5e85d6078810047731d02c062.html 个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~ ----------------------------------------------------------------------------

JZOJ 4638 第三条跑道 【NOIP2016提高组A组7.16】

第三条跑道 该题目的名字是一首歌 题目大意 输入格式 输出格式 对于每个询问,单独一行输出答案. 样例输入 5 2 3 4 5 6 3 1 1 5 0 2 3 6 1 2 3 样例输出 32 48 数据范围 题解 我们先看一下φ的通式. 其中p1, p2--pn为x的所有质因数,x是不为0的整数. 再看一下数据范围,,这也就意味着ai在任何时刻都满足它的素因子是600以内的,而φ(ai)只跟它的素因子有关. 因为是区间查询/修改,当然是开线段树了. 600以内的素因子有109个,所以我们就种10

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外,

假如你是动物农场里一匹马或是鸡,你会怎么做?

<动物农场>(Animal Farm)是英国著名作家乔治·奥威尔写的一部反乌托邦寓言小说,这本书几年前还是禁书,现在你能在正规渠道读到这本书,本身也说明我们确实在进步. 回看历史长河,动物农场里的故事在无数次的上演,成功了的,就像书中的猪一样,取代了人成为了新的当权者:失败了的,也就无声无息的淹没在历史的潮水之中,无人记起.历史的车轮就这样翻滚着,成功的,站上潮头,矗立潮头几百年,混得不好,十几年就被新的集团所取代.不变的是,无知的人民成为一波又一波新旧阶层的棋子. 一个令人深思的问题,假如你

java编码 100匹马 100块瓦

我给分为了两块  一个专门写代码    一个专门输出  看结果  用到太多的 if   还有一个简单的 没有用到太多的 if 判断 没有写注释  知识点都在我发的那些博客里面  如果还是有不懂的  可留言  补上注释 代码类 :  if 判断的 /** *    问:有100匹马 有100片瓦, *          大马能托3片瓦,中马能托2片瓦,三只小马能托一片瓦,正好这100匹马,把这100片瓦拉完. *                  问有多少匹大马,多少匹中马,多少匹小马? */pu

25匹马的问题

偶然看到个有意思的智力题,和大家一起讨论: 25匹马,要找跑的最快的前三,每轮可以有5匹马赛跑,只能记录先后,不能记录时间,最少需要跑多少轮 目前想到的解法: 首先分5组,赛5轮,去掉每组最后两匹,剩15匹: 然后5组第一名一起赛一轮,去掉最慢的两组,因为前面至少有3匹比这两组的都快: 此时剩下9匹,最快的一匹已经产生, 还剩8匹,再淘汰第3组的第二,三两匹, 第2组的第三匹(前面至少有3匹,故淘汰), 剩下5匹,赛一轮,得到最快的两匹即可.