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; }