1. 程式人生 > >STL綜合例項 打分系統(二)框架實現

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

結果如下: