STL綜合例項 打分系統(二)框架實現
阿新 • • 發佈:2018-11-11
接上篇 注意分數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); }
結果如下: