C/C++教程

c++ 题

本文主要是介绍c++ 题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

1、有24名选手,根据分数,每次淘汰一半,找出获胜的前三名

#include <iostream>
#include <time.h>
#include <vector>
#include <map>
#include <algorithm>
#include <numeric>
#include <functional>
#include <deque>

using namespace std;

class Player
{
public:
    string mName;
    int mScore[3];
};

// 创建选手
void create_Player(map<int,Player>& mPlist,vector<int>& v1)
{
    string seedName = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    for(int i=0;i<24;i++)
    {
        Player p;
        p.mName = "选手";
        p.mName += seedName[i];
        for(int j=0;j<3;j++)
        {
            p.mScore[j] = 0;
        }
        int uID = 100+i;
        mPlist.insert(make_pair(uID,p));    // 保存用户个人信息
        v1.push_back(uID);
    }
}

// 选手抽签
void Set_Random(vector<int>& v)
{ 
    random_shuffle(v.begin(),v.end());
}

// 比赛
// index 表示第几轮的
// vIn表示输入的编号
// vOut表示比完赛的编号

void Set_Score(int index,vector<int>& vIn,map<int,Player>& mPlist,vector<int>& vOut)
{
    srand((unsigned int)time(NULL));

    multimap<int,int,greater<int>> mGroup;
    int groupIndex = 0;
    for(vector<int>::iterator it=vIn.begin();it!=vIn.end();it++)
    {
        // 打分
        deque<int> dScore;
        for(int i=0;i<10;i++)
        {
            int score = rand()%40+60;
            dScore.push_back(score);
        }
        // 排序
        sort(dScore.begin(),dScore.end());
        // 去掉最高分,和最低分
        dScore.pop_back();
        dScore.pop_front();
        // 求平均分
        int totaoScore = accumulate(dScore.begin(),dScore.end(),0);
        int avgScore = totaoScore/dScore.size();
        mPlist[*it].mScore[index-1] = avgScore; // 根据编号给数组进行填充

        groupIndex++;
        // 把当前选手编号 和 平均分 放到mgroup中
        mGroup.insert(make_pair(avgScore,*it));
        if(groupIndex%6==0)
        {
            int numIndex = 0;
            for(multimap<int,int>::iterator mit=mGroup.begin();mit!=mGroup.end();mit++)
            {
                if(numIndex>=3)
                {
                    break;
                }
                vOut.push_back((*mit).second);
                numIndex++;
            }
            mGroup.clear();
        }
    }
}


// 打印晋级名单
void Show_Good_Player(int index,vector<int>& v,map<int,Player>& mPlist)
{
    cout<<"第"<<index<<"晋级名单:"<<endl;
    for(vector<int>::iterator it=v.begin();it!=v.end();it++)
    {
        cout<<"姓名:"<<mPlist[*it].mName<<" "<<mPlist[*it].mScore[index-1]<<endl;
    }
}


int main()
{
    // 定义map容器
    map<int,Player> mPlist;
    // 第一轮比赛参数列表
    vector<int> v1; //  24个人,晋级12个人
    // 12人放在第二轮比赛参赛列表中
    vector<int> v2; // 12人 晋级6个人
    // 第三轮比赛参赛列表(3人)
    vector<int> v3;
    // 最终的前三名
    vector<int> v4;

    // 创建选手
    create_Player(mPlist,v1);

    // 第一轮
    Set_Random(v1);
    Set_Score(1,v1,mPlist,v2);
    Show_Good_Player(1,v2,mPlist);

    // 第二轮
    Set_Random(v2);
    Set_Score(2,v2,mPlist,v3);
    Show_Good_Player(2,v3,mPlist);

    // 第三轮
    Set_Random(v3);
    Set_Score(3,v3,mPlist,v4);
    Show_Good_Player(3,v4,mPlist);

    return 0;
}
这篇关于c++ 题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!