STL学习之十五:STL综合案例--演讲比赛
来源:互联网 发布:三国无双Mac版 编辑:程序博客网 时间:2024/05/16 15:53
本文主要以演讲比赛为例介绍STL综合性的案例。演讲比赛每一轮晋级一半人数,淘汰一半人数。具体的分析见代码中的注释部分。下面是具体的代码。
#include "iostream"using namespace std;#include "vector"#include "set"#include "queue"#include "list"#include "algorithm"#include "string"#include "functional"#include "iterator"#include "numeric"#include "map"#include "deque"class Speaker{public:string m_name;int m_score[3];protected:private:};int GenSpeaker(map<int,Speaker> &mapSpeaker,vector<int> &v){string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";random_shuffle(str.begin(),str.end());for (int i=0;i<24;i++){Speaker tmp;tmp.m_name = "选手";tmp.m_score[0] = 0;tmp.m_score[1] = 0;tmp.m_score[2] = 0;tmp.m_name = tmp.m_name + str[i];mapSpeaker.insert(pair<int,Speaker>(100+i,tmp) );}for (int i=0;i<24;i++){v.push_back(100+i);}return 0;}//选手抽签 int speech_contest_draw(vector<int> &v){random_shuffle(v.begin(),v.end());return 0;}//选手比赛int speech_contest(int index,vector<int> &v1,map<int,Speaker> &mapSpeaker,vector<int> &v2){multimap<int,int,greater<int>> multimapGroup;//小组成绩int tmpCount = 0;for (vector<int>::iterator it=v1.begin();it!=v1.end();it++)//打分{tmpCount++;deque<int> dscore;for (int j=0;j<10;j++)//10个评委打分{int score = 50 + rand()%50;dscore.push_back(score);}sort(dscore.begin(),dscore.end());dscore.pop_back();dscore.pop_front();//去除最低分 和 最高分// 求平均分int scoresum = accumulate(dscore.begin(),dscore.end(),0);int scoreavg = scoresum/dscore.size();mapSpeaker[*it].m_score[index] = scoreavg;//选手得分 存入容器multimapGroup.insert(pair<int,int>(scoreavg,*it));// 处理分组if (tmpCount % 6 == 0){cout << "小组的比赛成绩:" << endl;for (multimap<int,int,greater<int>>::iterator mit=multimapGroup.begin();mit!=multimapGroup.end();mit++){//编号 姓名 得分cout << mit->second << "\t" << mapSpeaker[mit->second].m_name << "\t" << mit->first << endl;}// 前三名 晋级while(multimapGroup.size() > 3){multimap<int,int,greater<int>>::iterator it1 = multimapGroup.begin();v2.push_back(it1->second);// 把前三名编号 放到v2 晋级名单中multimapGroup.erase(it1);}multimapGroup.clear();// 清空本小组比赛成绩}}return 0;}//查看比赛结果int speech_contest_print(int index,vector<int> &v,map<int,Speaker> &mapSpeaker){cout << "第" <<index+1 << "轮晋级名单"<< endl;for (vector<int>::iterator it=v.begin();it!=v.end();it++){cout << "参数编号" << *it << "\t" << mapSpeaker[*it].m_name << "\t" << mapSpeaker[*it].m_score[index] << endl;}return 0;}void main(){map<int,Speaker>mapSpeaker;// 参加比赛的选手vector<int>v1;// 第一轮 演讲比赛名单vector<int>v2;// 第二轮 演讲比赛名单vector<int>v3;// 第三轮 演讲比赛名单vector<int>v4;// 第四轮 最后前三名 演讲比赛名单// 产生选手 得到第一轮选手的比赛名单GenSpeaker(mapSpeaker,v1);// 第一轮 选手抽签 选手比赛 查看比赛结果cout << "\n\n\n任意键开始第一轮比赛" << endl;cin.get();speech_contest_draw(v1);speech_contest(0,v1,mapSpeaker,v2);speech_contest_print(0,v2,mapSpeaker);// 第二轮 选手抽签 选手比赛 查看比赛结果cout << "\n\n\n任意键开始第二轮比赛" << endl;cin.get();speech_contest_draw(v2);speech_contest(1,v2,mapSpeaker,v3);speech_contest_print(1,v3,mapSpeaker);// 第三轮 选手抽签 选手比赛 查看比赛结果cout << "\n\n\n任意键开始决赛" << endl;cin.get();speech_contest_draw(v3);speech_contest(2,v3,mapSpeaker,v4);speech_contest_print(2,v4,mapSpeaker);cout << "hello..."<< endl;system("pause");}
阅读全文
0 0
- STL学习之十五:STL综合案例--演讲比赛
- STL综合案例-模拟演讲比赛
- STL案例之学校演讲比赛
- STL案例_演讲比赛
- STL案例_演讲比赛
- STL综合案例
- STL专题之map案例
- STL学习记录(十五):Stack
- 大爱C++——STL综合案例
- STL学习之(一)
- STL学习之(二)
- STL之学习笔记
- 学习STL之二
- STL学习之list
- STL之list学习
- STL学习之路
- STL学习之auto_ptr
- STL学习之vector
- python 读取文件注意事项
- Ubuntu 14.04 安装 CUDA8.0 cudnn 5.1 tensorflow1.2.1GPU
- 实现无缝轮播
- Appium简介以及工作原理
- hdu 6052 To my boyfriend 暴力枚举+容斥去重
- STL学习之十五:STL综合案例--演讲比赛
- 题目1047:素数判定
- js获取当前时间的年月日时分秒
- HDU-1394(线段树|归并排序)
- HDU
- 修改Metasploit安卓Payload源码以实现持久化访问
- springMVC学习总结
- 判断Cpu的字节序
- JVM调优总结(一):概念