接上篇 注意分数score是数组
#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<iterator>
#include<algorithm>
#include<numeric>
#include<functional>
#include<deque>
using namespace std;
class player{
public:
string name;
int score[3];
};
//创建选手
void Create_player(map<int,player>& mplist,vector<int>& v1){
string seedname="ABCDEFGHIGKLMNOPQRSTUVWXYZ";
for(int i=0;i<24;i++){
player p;
p.name="选手";
p.name+=seedname[i];
for(int j=0;j<3;j++){
p.score[j]=0;
}
int uID=100+i;
mplist.insert(make_pair(uID,p));
v1.push_back(uID);
}
}
//第一轮比赛
//随机抽签
void Set_Random(vector<int> &v1){
random_shuffle(v1.begin(), v1.end());
}
//打分
void Set_Score(int l,vector<int>& v1,map<int,player>& mplist,vector<int>& v2){
vector<int> ::iterator it;
//第一个分数 第二个编号
multimap<int, int,greater<int>> mGroup;
int groupindex=0;
deque<int> Dscore;
for(it=v1.begin();it!=v1.end();it++){
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 total=accumulate(Dscore.begin(),Dscore.end(),0);
int avg=total/Dscore.size();
mplist[*it].score[l-1]=avg;
mGroup.insert(make_pair(avg,*it));
groupindex++;
if(groupindex%6==0)
{
int mindex=0;
for(multimap<int,int> ::iterator mit =mGroup.begin();mit!=mGroup.end();mit++){
if(mindex>=3){
break;
}
v2.push_back((*mit).second);
mindex++;
}
mGroup.clear();
}
}
}
//晋级
void show_Good(int l,vector<int>& v1,map<int,player>& mplist){
cout<<"第"<<l<<"晋级名单"<<endl;
for(vector<int>::iterator it=v1.begin();it!=v1.end();it++){
cout<<"姓名: " <<mplist[*it].name<<" "<<"分数 "<<mplist[*it].score[l-1]<<endl;
}
}
int main(){
//定义map容器 根据编号保存选手信息
map<int,player> mplist;
//第一轮比赛参赛列表 24人晋级12人
vector<int> v1;
//第二轮比赛参赛列表 12人晋级6人
vector<int> v2;
//第三轮比赛列表 6人晋级3人
vector<int> v3;
//最终的前三名
vector<int> v4;
//创建选手
Create_player(mplist,v1);
//第一轮比赛
//随机分配
Set_Random(v1);
//打分
Set_Score(1,v1,mplist,v2);
//晋级
show_Good(1,v2,mplist);
//第二轮比赛
//随机分配
Set_Random(v2);
//打分
Set_Score(2,v2,mplist,v3);
//晋级
show_Good(2,v3,mplist);
//第三轮比赛
//随机分配
Set_Random(v3);
//打分
Set_Score(3,v3,mplist,v4);
//晋级
show_Good(3,v4,mplist);
}
结果如下: