STL应用的经典案例 有24人参加演讲比赛,抽签分组,6人一组,两轮淘汰赛,一轮决赛,最后求出最后前三名,要求打印每一轮的参赛情况和比赛结果
来源:互联网 发布:知豆能不能上高速 编辑:程序博客网 时间:2024/04/30 13:15
#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <vector>
#include <deque>
#include <functional>
#include <numeric>
using namespace std;
//参赛选手
class speaker
{
public:
string m_name;
int score[3];
};
//产生选手
void genespeaker(map<int,speaker> &mapspeaker,vector<int> &v)
{
string str="ABCDEFGHIGKLMNOPQRSTUVWXYZ";
random_shuffle(str.begin(),str.end());
for(int i=0;i<24;i++)
{
speaker tmp;
tmp.m_name="选手";
tmp.m_name=tmp.m_name+str[i];
mapspeaker.insert(pair<int,speaker>(100+i,tmp));
v.push_back(100+i);
}
}
//抽签
void speech_random(vector<int> &v)
{
random_shuffle(v.begin(),v.end());
}
//比赛
void speech_contest(int index,vector<int> &v1,map<int,speaker> &mapspeaker,vector<int> &v2)
{
multimap<int,int,greater<int>> multiGroup; //存小组成员的分数和编号
int count=0;
for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
{
count++;
deque<int> dscore;
//打分
{
for(int i=0;i<10;i++)
{
int score=50+rand()%50;
dscore.push_back(score);
}
dscore.pop_back();
dscore.pop_front();
int scoresum=accumulate(dscore.begin(),dscore.end(),0);
int avgscore=scoresum/dscore.size();
mapspeaker[*it].score[index]=avgscore;
multiGroup.insert(pair<int,int>(avgscore,*it));
}
//分组
if(count%6 == 0)
{
cout<<"各小组比赛结果"<<endl;
for(multimap<int,int,greater<int>>::iterator mit=multiGroup.begin();
mit!=multiGroup.end();mit++)
{
cout<<mit->second<<"\t"<<mapspeaker[mit->second].m_name<<"\t"<<mit->first<<endl;
}
//晋级名单
while(multiGroup.size()>3)
{
multimap<int,int,greater<int>>::iterator it1=multiGroup.begin();
v2.push_back(it1->second);
multiGroup.erase(it1);
}
multiGroup.clear();
}
}
}
void speech_print(int index,vector<int> &v2,map<int,speaker> &mapspeaker)
{
cout<<endl;
for(vector<int>::iterator it=v2.begin();it!=v2.end();it++)
{
cout<<"恭喜"<<*it<<"\t"<<mapspeaker[*it].m_name<<"\t"<<mapspeaker[*it].score[index]<<"晋级"<<endl;
}
}
int main()
{
map<int,speaker> mapspeaker; //存放参赛选手和其编号
vector<int> v1; //第一轮参赛选手编号名单
vector<int> v2; //第二轮参赛选手编号名单
vector<int> v3; //决赛参赛选手编号名单
vector<int> v4; //前三名选手编号名单
//产生选手
genespeaker(mapspeaker,v1);
//第一轮 抽签 比赛 晋级名单
cout<<"按任意键开始比赛1"<<endl;
cin.get();
speech_random(v1);
speech_contest(0,v1,mapspeaker,v2);
speech_print(0,v2,mapspeaker);
//第二轮 抽签 比赛 晋级名单
cout<<"按任意键开始比赛1"<<endl;
cin.get();
cin.get();
speech_random(v2);
speech_contest(1,v2,mapspeaker,v3);
speech_print(1,v3,mapspeaker);
//第三轮 抽签 比赛 晋级名单
cout<<"按任意键开始比赛1"<<endl;
cin.get();
cin.get();
speech_random(v3);
speech_contest(2,v3,mapspeaker,v4);
speech_print(2,v4,mapspeaker);
return 0;
}
#include <algorithm>
#include <map>
#include <string>
#include <vector>
#include <deque>
#include <functional>
#include <numeric>
using namespace std;
//参赛选手
class speaker
{
public:
string m_name;
int score[3];
};
//产生选手
void genespeaker(map<int,speaker> &mapspeaker,vector<int> &v)
{
string str="ABCDEFGHIGKLMNOPQRSTUVWXYZ";
random_shuffle(str.begin(),str.end());
for(int i=0;i<24;i++)
{
speaker tmp;
tmp.m_name="选手";
tmp.m_name=tmp.m_name+str[i];
mapspeaker.insert(pair<int,speaker>(100+i,tmp));
v.push_back(100+i);
}
}
//抽签
void speech_random(vector<int> &v)
{
random_shuffle(v.begin(),v.end());
}
//比赛
void speech_contest(int index,vector<int> &v1,map<int,speaker> &mapspeaker,vector<int> &v2)
{
multimap<int,int,greater<int>> multiGroup; //存小组成员的分数和编号
int count=0;
for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
{
count++;
deque<int> dscore;
//打分
{
for(int i=0;i<10;i++)
{
int score=50+rand()%50;
dscore.push_back(score);
}
dscore.pop_back();
dscore.pop_front();
int scoresum=accumulate(dscore.begin(),dscore.end(),0);
int avgscore=scoresum/dscore.size();
mapspeaker[*it].score[index]=avgscore;
multiGroup.insert(pair<int,int>(avgscore,*it));
}
//分组
if(count%6 == 0)
{
cout<<"各小组比赛结果"<<endl;
for(multimap<int,int,greater<int>>::iterator mit=multiGroup.begin();
mit!=multiGroup.end();mit++)
{
cout<<mit->second<<"\t"<<mapspeaker[mit->second].m_name<<"\t"<<mit->first<<endl;
}
//晋级名单
while(multiGroup.size()>3)
{
multimap<int,int,greater<int>>::iterator it1=multiGroup.begin();
v2.push_back(it1->second);
multiGroup.erase(it1);
}
multiGroup.clear();
}
}
}
void speech_print(int index,vector<int> &v2,map<int,speaker> &mapspeaker)
{
cout<<endl;
for(vector<int>::iterator it=v2.begin();it!=v2.end();it++)
{
cout<<"恭喜"<<*it<<"\t"<<mapspeaker[*it].m_name<<"\t"<<mapspeaker[*it].score[index]<<"晋级"<<endl;
}
}
int main()
{
map<int,speaker> mapspeaker; //存放参赛选手和其编号
vector<int> v1; //第一轮参赛选手编号名单
vector<int> v2; //第二轮参赛选手编号名单
vector<int> v3; //决赛参赛选手编号名单
vector<int> v4; //前三名选手编号名单
//产生选手
genespeaker(mapspeaker,v1);
//第一轮 抽签 比赛 晋级名单
cout<<"按任意键开始比赛1"<<endl;
cin.get();
speech_random(v1);
speech_contest(0,v1,mapspeaker,v2);
speech_print(0,v2,mapspeaker);
//第二轮 抽签 比赛 晋级名单
cout<<"按任意键开始比赛1"<<endl;
cin.get();
cin.get();
speech_random(v2);
speech_contest(1,v2,mapspeaker,v3);
speech_print(1,v3,mapspeaker);
//第三轮 抽签 比赛 晋级名单
cout<<"按任意键开始比赛1"<<endl;
cin.get();
cin.get();
speech_random(v3);
speech_contest(2,v3,mapspeaker,v4);
speech_print(2,v4,mapspeaker);
return 0;
}
阅读全文
0 0
- STL应用的经典案例 有24人参加演讲比赛,抽签分组,6人一组,两轮淘汰赛,一轮决赛,最后求出最后前三名,要求打印每一轮的参赛情况和比赛结果
- HW的最后一轮面试
- 最后一轮模拟~总结
- 夜雾里的大河,这一轮最后的行走
- 新一轮战争号角被吹响,谁会是最后的新王?
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- 又一轮的面试
- oracle查询分组数据中的最后一条数据和每组的数量
- 2007A3联赛最后一轮申花获胜夺冠!
- 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数(2,4,6,8,10,…),现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值
- 面临新一轮的挑战
- 开始新的一轮测试
- 开始新一轮的计划
- 新一轮的小游戏推荐
- 练习6-2 编写一个程序,用以读入一个C语言程序,并按字母表顺序分组打印变量名,要求每一组内各变量名的前六个字符相同,其余字符不同
- 二维数组中的查找——剑指offer新解
- AOC显示器OSD已锁是什么意思?怎么解锁?
- Spring整合CXF 发布webservice接口服务器(普通及REST)和客户端,WSDL简单解析
- 隐藏在概率背后的冷常识(2)——最高胜率取决于初始失败的概率
- luogu2978 [USACO10JAN]下午茶时间Tea Time
- STL应用的经典案例 有24人参加演讲比赛,抽签分组,6人一组,两轮淘汰赛,一轮决赛,最后求出最后前三名,要求打印每一轮的参赛情况和比赛结果
- 【LibUIDK界面库系列文章】代码风格
- R server on C3
- 【20171002】Java每日一练
- 结构体变量的引用的一些说明
- NOIP 考前日记
- Jquery精品实战
- 爬取校园网1000多条账号密码
- Ubuntu下Faster Rcnn框架的配置