c++-STL容器-演讲比赛(24人)

c++-STL容器-演讲比赛(24人),第1张

视频链接:https://www.bilibili.com/video/BV1QD4y1R7nZ?spm_id_from=333.337.search-card.all.click
比赛顺序
1)产生选手 姓名 得分 选手编号
nameSeed=“ABCDEFGHIJKLMNOPQRSTUVWSYZ”
2)第一轮 选手抽签 选手比赛 查看比赛结果
3)第二轮 选手抽签 选手比赛 查看比赛结果
4)第三轮 选手抽签 选手比赛 查看比赛结果

选手抽签代码
关键点:容器和类的创建

#include 
#include
#include
#include
#include
using namespace std;
/*
1)产生选手 姓名 得分 选手编号
nameSeed="ABCDEFGHIJKLMNOPQRSTUVWSYZ"
2)第一轮   选手抽签 选手比赛 查看比赛结果
3)第二轮   选手抽签 选手比赛 查看比赛结果
4)第三轮   选手抽签 选手比赛 查看比赛结果
*/

//演讲者信息①
class Speaker{

public:
    string  m_Name;
    int m_Score[3];//得分数数组,因为有多轮比赛
};

//创建演讲者
void  creatSpeaker(vector<int> &v,map<int,Speaker>&m){
    string nameSeed="ABCDEFGHIJKLMNOPQRSTUVWSYZ";
    //一层循环创建speaker
    for(int i=0;i<nameSeed.size();i++){   //使用循环创建选手
        string name="选手";
        name+=nameSeed[i];//结果:选手A,选手B……

        Speaker sp;//实例化对象。


sp.m_Name=name;//把刚刚设好的name值传给对象 for(int j=0;j<3;j++){ sp.m_Score[j]=0; }//初始得分为0; v.push_back(i+100);//编号:100~123,编号从100开始 m.insert(make_pair(i+100,sp));//将数据插入到map容器中 }; }; //抽签 void speechDrew(vector<int> v){ //洗牌算法 random_shuffle(v.begin(),v.end()); }; int main() { //容器的使用② vector<int>v1;//存放选手编号 map<int ,Speaker>m;//存放选手编号和具体的选手 //创建选手 creatSpeaker(v1,m);//分析这个函数里面会有什么内容 //抽签 speechDrew(v1); #if 0 //测试 for(map<int,Speaker>::iterator it=m.begin();it!=m.end();it++ ) { // cout<<<first<<"姓名"<second< cout<<"编号"<<it->first<<it->second.m_Name<<endl;//这个引用调用要记清 } //cout << "Hello World!" << endl; #endif return 0; }

``

选手比赛

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
/*
1)产生选手 姓名 得分 选手编号
nameSeed="ABCDEFGHIJKLMNOPQRSTUVWSYZ"
2)第一轮   选手抽签 选手比赛 查看比赛结果
3)第二轮   选手抽签 选手比赛 查看比赛结果
4)第三轮   选手抽签 选手比赛 查看比赛结果
*/

//演讲者信息
class Speaker{

public:
    string  m_Name;
    int m_Score[3];//得分数数组,因为有多轮比赛
};

//创建演讲者
void  creatSpeaker(vector<int> &v,map<int,Speaker>&m){
    string nameSeed="ABCDEFGHIJKLMNOPQRSTUVWSYZ";
    //一层循环创建speaker
    for(int i=0;i<nameSeed.size();i++){   //使用循环创建选手
        string name="选手";
        name+=nameSeed[i];//结果:选手A,选手B……

        Speaker sp;//实例化对象。


sp.m_Name=name;//把刚刚设好的name值传给对象 for(int j=0;j<3;j++){ sp.m_Score[j]=0; }//初始得分为0; v.push_back(i+100);//编号:100~123,编号从100开始 m.insert(make_pair(i+100,sp));//将数据插入到map容器中 }; }; //抽签 void speechDrew(vector<int> v){ //洗牌算法 random_shuffle(v.begin(),v.end()); }; //选手比赛 index代表选手第几轮比赛;v1比赛选手编号;m是选手编号和具体选手;v2晋级选手编号容器 void speechContest(int index,vector<int>&v1,map<int,Speaker>&m,vector<int>v2){ //临时容器 multimap<int,int,greater<int>>groupMap;//key 分数 value 编号 int num=0; for(vector<int>::iterator it=v1.begin();it<v1.end();it++) { num++; // 使用deque容器处理分数。


deque<int>d; for(int i=0;i<10;i++) { int score=rand()%41+60; d.push_back(score); } //排序算法 sort(d.begin(),d.end()); //去除最高最低 d.pop_back(); d.pop_front(); //累计分数 int sum=accumulate(d.begin(),d.end()); int avg=sum/d.size(); //将平均分放入m容器中。


m[*it].m_Score[index-1]=avg;//为什么要减1? //每六个人取前三名紧急 //临时容器保存六个人(比完之后要清空) //临时容器存储数据 groupMap.insert(make_pair(avg,*it)); if(num&6==0) { // cout<<"小组比赛成绩"< // for(multimap>::iterator mit=groupMap.begin();mit!=groupMap.end();mit++) // { // cout<<"编号"<second<<"姓名"<second].m_Name<<"得分"<second].m_Score[index-1]< // }; int count=0; for(multimap<int,int,greater<int>>::iterator mit=groupMap.begin();mit!=groupMap.end(),count<3;mit++,count++) { //晋级容器获取数据 v2.push_back(mit->second); } groupMap.clear(); } }; }; void showScore(int index,vector<int>&v,map<int,Speaker>&m){ cout<<"第"<<index<<"轮,比赛成绩如下"<<endl; for(map<int,Speaker>::iterator it=m.begin();it!=m.end();it++) { cout<<"选手编号"<<it->first<<"姓名"<<it->second.m_Name<<"分数"<<it->second.m_Score<<endl; }; cout<<"晋级选手编号"<<endl; for(vector<int>::iterator it=v.begin();it<v.end();it++) { cout<<*it<<end; }; }; int main() { //随机数种子 srand((unsigned int)time(NULL)); //容器的使用 vector<int>v1;//存放选手编号 map<int ,Speaker>m;//存放选手编号和具体的选手 //创建选手 creatSpeaker(v1,m);//分析这个函数里面会有什么内容 //抽签 speechDrew(v1); //比赛 vector<int>v2;//进入下一轮比赛的人的人员编号。


speechContest(1,v1,m,v2);//需要三个容器,其中v2是装比赛后的分数。


//显示比赛结果 showScore(1,v2,m);//轮数 进级编号 具体人员信息 //第二轮比赛 speechDrew(v2); vector<int>v3; speechContest(2,v2,m,v3); showScore(2,v3,m); //第三轮比赛 speechDrew(v3); vector<int>v4; speechContest(3,v2,m,v4); showScore(3,v4,m); #if 0 //测试 for(map<int,Speaker>::iterator it=m.begin();it!=m.end();it++ ) { // cout<<<first<<"姓名"<second< cout<<"编号"<<it->first<<it->second.m_Name<<endl;//这个引用调用要记清 } //cout << "Hello World!" << endl; #endif return 0; }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/562468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存