项目案例

one、stl容器类案例
演讲比赛案例
// dem1_演讲比赛.cpp : 定義主控台應用程式的進入點。
//

/****************************
分析需求
搭建逻辑框架
函数实现
*************************/


#include "stdafx.h"
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <deque>
#include <algorithm>
#include <numeric>
#include <functional>

using namespace std;

//定义选手类
class Speaker{
public:
	string name;
	int score[3];
};

//创建选手,取引用
void Creat_Speaker(map<int, Speaker> & mapSpeaker, vector<int> &v1)
{
	string nameseed = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for (int i=0; i < 24;i++)
	{
		Speaker speaker;
		speaker.name = "选手";
		speaker.name += nameseed[i];

		speaker.score[0] = 0;
		speaker.score[1] = 1;
		speaker.score[2] = 1;
		//创建选手唯一的参赛编号
		int SpeakerID = 100 + i;
		mapSpeaker.insert(make_pair(SpeakerID, speaker));//保存选手信息
		v1.push_back(SpeakerID);
	}
}
//选手抽签
void Random_SpeakerID(vector<int> v1)
{
	random_shuffle(v1.begin(), v1.end());//打乱
}
//选手比赛
void Match_Speaker(int index, vector<int>& v1, map<int, Speaker> & mapSpeaker,vector<int>& v2)
{
	multimap<int, int,greater<int>> mapGroup;
	int indexTemp = 0;
	int indexGroup = 0;
	for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++)
	{
		indexTemp++;
		deque<int> dscore;//保存评委十次得分
		for (int i = 0; i < 10; i++){
		int score = 50 + rand() % 50;
		dscore.push_back(score);
		}
		
	//排序
	sort(dscore.begin(), dscore.end());//默认从小到大排序
	dscore.pop_back();//拿掉尾部,去掉最高分
	dscore.pop_front();//拿掉头部,去掉最低分
	//求和求平均分
	int totalscore = accumulate(dscore.begin(), dscore.end(), 0);
	int scoreavg = totalscore / dscore.size();
	
	mapSpeaker[*it].score[index - 1] = scoreavg;//保存当前选手得分
	mapGroup.insert(make_pair(scoreavg, *it));//保存分组信息

	//判断六个人一组
	if (indexTemp % 6 == 0)
	{
		int highIndex = 0;
		indexGroup++;
		printf("第%d轮比赛第%d组比赛成绩:\n", index, indexGroup);
		for (multimap<int, int, greater<int>>::iterator it = mapGroup.begin(); it != mapGroup.end(); it++)
		{
		
			highIndex++;
			if (highIndex <= 3){
				v2.push_back(it->second);
			}
			cout << "姓名" << mapSpeaker[it->second].name << "分数:" << mapSpeaker[it->first].score[index - 1]<<endl;
		}
		//取出当前分组的前三名放进v2

		mapGroup.clear();//清空map
	}
	}

}
//查看比赛结果
void ShowMatchResult(int index, vector<int>& v2, map<int, Speaker>& mapSpeaker)
{
	printf("第%d轮比赛晋级名单:\n", index);
	for (vector<int>::iterator it = v2.begin(); it != v2.end(); it++)
	{
		cout << "姓名:" << mapSpeaker[*it].name << "分数:" << mapSpeaker[*it].score[index - 1]<<endl;
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	map<int, Speaker> mapSpeaker; //保存选手信息
	vector<int> v1;//保存第一轮参赛编号
	vector<int> v2; //第一轮比赛的晋级编号
	vector<int> v3;//保存第二轮比赛晋级名单
	vector<int> v4;//保存最终的前三名编号

	//创建选手24名
	Creat_Speaker(mapSpeaker, v1);

	//第一轮比赛
	Random_SpeakerID(v1);//选手抽签
	Match_Speaker(1, v1, mapSpeaker,v2);//选手比赛
	ShowMatchResult(1, v2, mapSpeaker);//查看比赛结果

	//第二轮比赛
	Random_SpeakerID(v2);//选手抽签
	Match_Speaker(2, v2, mapSpeaker, v3);//选手比赛
	ShowMatchResult(2, v3, mapSpeaker);//查看比赛结果

	//第二轮比赛
	Random_SpeakerID(v2);//选手抽签
	Match_Speaker(3, v3, mapSpeaker, v4);//选手比赛
	ShowMatchResult(3, v4, mapSpeaker);//查看比赛结果

	
	return 0;
}





#3920190227221133#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务