视频链接: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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)