需求分析
(1)产生选手 (ABCDEFGHIGKLMNOPQRSTUVWX) 编号 姓名,得分
(2)第一轮 抽签 比赛 查看结果
(3)第二轮 抽签 比赛 查看结果
(4)第三轮 抽签 比赛 查看结果
#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>
#include<functional>
#include<numeric>
#include<map>
using namespace std;
//(1)产生选手 (ABCDEFGHIGKLMNOPQRSTUVWX) 编号 姓名,得分
//(2)第一轮 抽签 比赛 查看结果
//(3)第二轮 抽签 比赛 查看结果
//(4)第三轮 抽签 比赛 查看结果
class Speaker
{
public:
Speaker()
{}
Speaker(string name,int score)
{
this->m_Name=name;
for(int i=0;i<3;i++)
{
this->score[i]=score;
}
}
string m_Name;
int score[3];
};
//创建选手
void createSpeaker(vector<int> &v,map<int ,Speaker> &m)
{
string nameSeed="ABCDEFGHIGKLMNOPQRSTUVWX";
for(int i=0;i<nameSeed.size();i++)
{
string name="选手";
name +=nameSeed[i];
Speaker sp(name,0);
v.push_back(i+100); //创建编号
m.insert(make_pair(i+100,sp));//创建编号,姓名和成绩
}
////检测数据
//for(map<int ,Speaker>::iterator it = m.begin();it!=m.end();++it)
//{
// cout<<"编号:"<<it->first <<" "<<"姓名:"<<it->second.m_Name<<endl;
//}
}
//抽签
void speechDraw(vector<int> &v)
{
random_shuffle(v.begin(),v.end());
//检测数据
//for_each(v.begin(),v.end(),[](int val){cout<<"编号:"<<val<<endl;;});
}
void contest(int index,vector<int> &v1,map<int,Speaker> &m,vector<int> &v2)
{
multimap<int,int,greater<int>> mm;//成绩,编号
for(vector<int>::iterator it=v1.begin();it!=v1.end();++it)
{
deque<int> q;
for(int i=0;i<10;i++)
{
int score = rand()%41+60;//60~100
q.push_back(score);
}
//排序掐头去尾
sort(q.begin(),q.end());
q.pop_back();
q.pop_front();
//求平均值成绩,给每个人
int sum =accumulate(q.begin(),q.end(),0);
int avg=sum/q.size();
m[*it].score[index-1]=avg;
//检测数据
//cout<<"编号:"<<*it<<" "<<"姓名:"<<m[*it].m_Name<<" "<<"成绩:"<<m[*it].score[1]<<endl;
mm.insert(make_pair(avg,*it));
if(mm.size()==6)//6人一组够了就处理
{
int count=0;
for(multimap<int,int,greater<int>>::iterator mit=mm.begin();count<3;count++,mit++)
{
v2.push_back(mit->second);
}
////检测数据
//cout<<"第i组成绩:"<<endl;
//for(multimap<int,int,greater<int>>::iterator mit=mm.begin();mit!=mm.end();mit++)
//{
// cout<<"编号:"<<(*mit).second<<" "<<"姓名:"<<m[(*mit).second].m_Name<<" "<<"成绩:"<<m[(*mit).second].score[0]<<endl;
//}
mm.clear();//清空,为下一组处理
}
}
}
void showScore(int index,vector<int> &v,map<int,Speaker> &m)
{
cout<<"第"<<index<<"轮比赛"<<endl;
for(vector<int>::iterator it =v.begin();it!=v.end();++it)
{
cout<<"编号:"<<*it<<" "<<"姓名:"<<m[*it].m_Name<<" "<<"成绩:"<<m[*it].score[index-1]<<endl;
}
}
int main()
{
vector<int> v1;
map<int ,Speaker> m;
//创建选手
createSpeaker(v1,m);
//抽签
speechDraw(v1);
//比赛第一轮
vector<int> v2;
contest(1,v1,m,v2);//轮数,编号,选手,晋级选手
showScore(1,v2,m);
cout<<"--------------------------------------------------------------------------------"<<endl;
//第二轮
vector<int> v3;
contest(2,v2,m,v3);
showScore(2,v3,m);
cout<<"--------------------------------------------------------------------------------"<<endl;
//第三轮
vector<int> v4;
contest(3,v3,m,v4);
showScore(3,v4,m);
cout<<"--------------------------------------------------------------------------------"<<endl;
return 0;
}