前言
今天的心情不能再糟糕了,昨天听了拿了offer的师兄师姐的分享会,感觉自己一无是处,不是时间的问题,而是不知道努力的方向,再加上突然来到的数字化塔的任务打乱了我的计划,心仿佛跌到了冰窖,末日来临。学习还是要继续,那么。。来吧。
题目:
(1)举行一场演讲比赛,共有24个人参加,比赛共三轮。
(2)比赛方式:分组比赛,一组6个人:选手每次都要随机分组比赛。
第一轮分为4个组,每个组6人。
抽签打乱,演讲完淘汰组内最后的三个选手(每组晋级3个),开始下一轮比赛。
第二轮还是每组6人,淘汰最后三个选手(每组晋级3个)。
第三轮决赛只剩6人,选出前三名。
(:)果然还是自己读一遍题清晰多了。。)
(3)比赛评分:10个评委打分,去除最低分,最高分,求平均分。
需求分析:每一轮都是 选手抽签 选手比赛 展示结果
#define _CRT_SECURE_NO_WARINGS
#include <iostream>
#include<map>
#include<vector>
#include<string>
#include<deque>
#include<algorithm>
#include<numeric>
#include<functional>
using namespace std;
//定义选手类
class Speaker
{
public:
string name;
int score[3];
};
void CreateSpeaker(map<int, Speaker>& mapspeaker, vector<int>& v)
{
string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < 24; i++)
{
Speaker s_tmp;
s_tmp.name = str[i];
s_tmp.score[0] = 0;
s_tmp.score[1] = 0;
s_tmp.score[2] = 0;
mapspeaker.insert(pair<int, Speaker>(i+100, s_tmp));//选手编号为101.。。
v.push_back(i+100);
}
}
int Random_Speaker(vector<int>&v)
{
random_shuffle(v.begin(), v.end());
return 0;
}
int Fight(int index, vector<int>&v1, map<int, Speaker>& mapspeaker, vector<int>& v2)
{
int intdex_group = 0;
int FLAG_group = 0;
multimap<int, int,greater<int>> mulmap;//第一个放分数,第二个放id
for (vector<int>::iterator it = v1.begin(); it!= v1.end(); it++)
{
intdex_group++;
deque<int> d1;
for (int i = 0; i < 10; i++)
{
int tmp = rand() % 50 + 50;
d1.push_back(tmp);
}
sort(d1.begin(), d1.end());
d1.pop_front();
d1.pop_back();
int total = accumulate(d1.begin(), d1.end(), 0);
int aver = total / d1.size();
mapspeaker.at(*it).score[index - 1] = aver;
mulmap.insert(make_pair(aver, *it));
if (intdex_group%6==0)
{
int high3 = 0;
FLAG_group++;
printf("第%d轮比赛第%d组比赛成绩:\n", index, FLAG_group);
for (multimap<int, int, greater<int>>::iterator mi = mulmap.begin(); mi!=mulmap.end(); mi++)
{
high3++;
if (high3<=3)
{
v2.push_back(mi->second);
}
cout << "姓名" << mapspeaker[mi->second].name << " 分数是:" << mi->first << endl;
}
mulmap.clear();
}
}
return 0;
}
//查看比赛结果
void Show_Match_result(int index, vector<int>&v2, map<int, Speaker>& mapspeaker)
{
printf("第%d轮比赛晋级名单:\n", index);
for (vector<int>::iterator it = v2.begin(); it!=v2.end(); it++)
{
cout << mapspeaker[*it].name << " " << mapspeaker[*it].score[index - 1]<<endl;
}
}
class print
{
public:
void operator()(int v)
{
cout << v<<" ";
}
};
void main()
{
map<int, Speaker> mapspeaker;//保存选手的信息
vector<int> v1;//所有选手编号
vector<int> v2;//第一轮晋级的编号
vector<int> v3;//第二轮比赛晋级名单
vector<int> v4;//保存最终的前三名
//创建选手 24名
CreateSpeaker(mapspeaker,v1);
//第一轮比赛
Random_Speaker(v1);//选手抽签
Fight(1, v1, mapspeaker,v2);//选手比赛
Show_Match_result(1, v2, mapspeaker);//查看比赛结果
//第二轮比赛
Random_Speaker(v2);//选手抽签
Fight(2, v2, mapspeaker,v3);//选手比赛
Show_Match_result(1, v3, mapspeaker);//查看比赛结果
//第三轮比赛
Random_Speaker(v3);//选手抽签
Fight(3, v3, mapspeaker, v4);//选手比赛
Show_Match_result(3, v4, mapspeaker);//查看比赛结果
system("pause");
}