STL综合实例 打分系统(二)框架实现

接上篇 注意分数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);
    
    
    
}

结果如下:

猜你喜欢

转载自blog.csdn.net/q2213065359/article/details/82873899
今日推荐