STL--演讲比赛

需求分析

(1)产生选手 (ABCDEFGHIGKLMNOPQRSTUVWX) 编号 姓名,得分
(2)第一轮 抽签 比赛 查看结果
(3)第二轮 抽签 比赛 查看结果
(4)第三轮 抽签 比赛 查看结果

#include<iostream>
#include<string>
#include<vector>
#include<deque>
#include<algorithm>
#include<functional>
#include<numeric>
#include<map>
using namespace std;

//(1)产生选手 (ABCDEFGHIGKLMNOPQRSTUVWX)	编号     姓名,得分
//(2)第一轮   抽签  比赛   查看结果
//(3)第二轮   抽签  比赛   查看结果
//(4)第三轮   抽签  比赛   查看结果
class Speaker
{
public:
	Speaker()
	{}
	Speaker(string name,int score)
	{
		this->m_Name=name;
		for(int i=0;i<3;i++)
		{
			this->score[i]=score;
		}
	}
	string m_Name;
	int score[3];
};
//创建选手
void createSpeaker(vector<int> &v,map<int ,Speaker> &m)
{
	string nameSeed="ABCDEFGHIGKLMNOPQRSTUVWX";
	for(int i=0;i<nameSeed.size();i++)
	{
		string name="选手";
		name +=nameSeed[i];
		Speaker sp(name,0);

		v.push_back(i+100);  //创建编号

		m.insert(make_pair(i+100,sp));//创建编号,姓名和成绩
	}
	////检测数据
	//for(map<int ,Speaker>::iterator it = m.begin();it!=m.end();++it)
	//{
	//	cout<<"编号:"<<it->first <<"  "<<"姓名:"<<it->second.m_Name<<endl;
	//}
}
//抽签
void speechDraw(vector<int> &v)
{
	random_shuffle(v.begin(),v.end());
	//检测数据
	//for_each(v.begin(),v.end(),[](int val){cout<<"编号:"<<val<<endl;;});
}
void contest(int index,vector<int> &v1,map<int,Speaker> &m,vector<int> &v2)
{
	multimap<int,int,greater<int>> mm;//成绩,编号
	for(vector<int>::iterator it=v1.begin();it!=v1.end();++it)
	{
		deque<int> q;
		for(int i=0;i<10;i++)
		{
			int score = rand()%41+60;//60~100
			q.push_back(score);
		}
		//排序掐头去尾
		sort(q.begin(),q.end());
		q.pop_back();
		q.pop_front();

		//求平均值成绩,给每个人
		int sum =accumulate(q.begin(),q.end(),0);
		int avg=sum/q.size();
		m[*it].score[index-1]=avg;
		//检测数据
		//cout<<"编号:"<<*it<<"  "<<"姓名:"<<m[*it].m_Name<<" "<<"成绩:"<<m[*it].score[1]<<endl;

		mm.insert(make_pair(avg,*it));
		if(mm.size()==6)//6人一组够了就处理
		{
			int count=0;
			for(multimap<int,int,greater<int>>::iterator mit=mm.begin();count<3;count++,mit++)
			{
				v2.push_back(mit->second);
		    }
			////检测数据
			//cout<<"第i组成绩:"<<endl;
			//for(multimap<int,int,greater<int>>::iterator mit=mm.begin();mit!=mm.end();mit++)
			//{
			//	cout<<"编号:"<<(*mit).second<<"  "<<"姓名:"<<m[(*mit).second].m_Name<<" "<<"成绩:"<<m[(*mit).second].score[0]<<endl;
			//}
			
			mm.clear();//清空,为下一组处理
		}

	}
}
void showScore(int index,vector<int> &v,map<int,Speaker> &m)
{
	cout<<"第"<<index<<"轮比赛"<<endl;
	for(vector<int>::iterator it =v.begin();it!=v.end();++it)
	{
		
		cout<<"编号:"<<*it<<"  "<<"姓名:"<<m[*it].m_Name<<" "<<"成绩:"<<m[*it].score[index-1]<<endl;
	}
}
int main()
{
	vector<int> v1;
	map<int ,Speaker> m;
	//创建选手	
	createSpeaker(v1,m);
	//抽签
	speechDraw(v1);
	//比赛第一轮
	vector<int> v2;
	contest(1,v1,m,v2);//轮数,编号,选手,晋级选手
	showScore(1,v2,m);
	cout<<"--------------------------------------------------------------------------------"<<endl;
	//第二轮
	vector<int> v3;
	contest(2,v2,m,v3);
	showScore(2,v3,m);
	cout<<"--------------------------------------------------------------------------------"<<endl;
	//第三轮
	vector<int> v4;
	contest(3,v3,m,v4);
	showScore(3,v4,m);
	cout<<"--------------------------------------------------------------------------------"<<endl;
	return 0;
}
发布了56 篇原创文章 · 获赞 15 · 访问量 7564

猜你喜欢

转载自blog.csdn.net/YanWenCheng_/article/details/104096325
今日推荐