STL容器的学习案例

前言
今天的心情不能再糟糕了,昨天听了拿了offer的师兄师姐的分享会,感觉自己一无是处,不是时间的问题,而是不知道努力的方向,再加上突然来到的数字化塔的任务打乱了我的计划,心仿佛跌到了冰窖,末日来临。学习还是要继续,那么。。来吧。

题目:
(1)举行一场演讲比赛,共有24个人参加,比赛共三轮。
(2)比赛方式:分组比赛,一组6个人:选手每次都要随机分组比赛。
第一轮分为4个组,每个组6人。
抽签打乱,演讲完淘汰组内最后的三个选手(每组晋级3个),开始下一轮比赛。
第二轮还是每组6人,淘汰最后三个选手(每组晋级3个)。
第三轮决赛只剩6人,选出前三名。
(:)果然还是自己读一遍题清晰多了。。)
(3)比赛评分:10个评委打分,去除最低分,最高分,求平均分。

需求分析:每一轮都是 选手抽签 选手比赛 展示结果

#define _CRT_SECURE_NO_WARINGS

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

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

void CreateSpeaker(map<int, Speaker>& mapspeaker, vector<int>& v)
{
	string str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	for (int i = 0; i < 24; i++)
	{
		
		Speaker s_tmp;
		s_tmp.name = str[i];
		s_tmp.score[0] = 0;
		s_tmp.score[1] = 0;
		s_tmp.score[2] = 0;
		mapspeaker.insert(pair<int, Speaker>(i+100, s_tmp));//选手编号为101.。。
		v.push_back(i+100);
	}
}

int Random_Speaker(vector<int>&v)
{
	random_shuffle(v.begin(), v.end());
	return 0;
}

int Fight(int index, vector<int>&v1, map<int, Speaker>& mapspeaker, vector<int>& v2)
{
	int intdex_group = 0;
	int FLAG_group = 0;
	multimap<int, int,greater<int>> mulmap;//第一个放分数,第二个放id
	for (vector<int>::iterator it = v1.begin(); it!= v1.end(); it++)
	{
		intdex_group++;
		deque<int> d1;
		for (int i = 0; i < 10; i++)
		{
			int tmp = rand() % 50 + 50;
			d1.push_back(tmp);
		}
		sort(d1.begin(), d1.end());
		d1.pop_front();
		d1.pop_back();
		int total = accumulate(d1.begin(), d1.end(), 0);
		int aver = total / d1.size();
		mapspeaker.at(*it).score[index - 1] = aver;
		mulmap.insert(make_pair(aver, *it));
		if (intdex_group%6==0)
		{
			int high3 = 0;
			FLAG_group++;
			printf("第%d轮比赛第%d组比赛成绩:\n", index, FLAG_group);
			for (multimap<int, int, greater<int>>::iterator mi = mulmap.begin(); mi!=mulmap.end(); mi++)
			{
				high3++;
				if (high3<=3)
				{
					v2.push_back(mi->second);
				}
				cout << "姓名" << mapspeaker[mi->second].name << " 分数是:" << mi->first << endl;
			}
			mulmap.clear();

		}
	}


	return 0;
}

//查看比赛结果
void Show_Match_result(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;
	}
}

class print
{
public:
	void operator()(int v)
	{
		cout << v<<" ";
	}

};


void main()
{
	map<int, Speaker> mapspeaker;//保存选手的信息
	
	vector<int> v1;//所有选手编号
	vector<int> v2;//第一轮晋级的编号
	vector<int> v3;//第二轮比赛晋级名单
	vector<int> v4;//保存最终的前三名

	//创建选手 24名
	CreateSpeaker(mapspeaker,v1);

	
	//第一轮比赛
	Random_Speaker(v1);//选手抽签
	Fight(1, v1, mapspeaker,v2);//选手比赛
	Show_Match_result(1, v2, mapspeaker);//查看比赛结果

	//第二轮比赛
	Random_Speaker(v2);//选手抽签
	Fight(2, v2, mapspeaker,v3);//选手比赛
	Show_Match_result(1, v3, mapspeaker);//查看比赛结果

	//第三轮比赛
	Random_Speaker(v3);//选手抽签
	Fight(3, v3, mapspeaker, v4);//选手比赛
	Show_Match_result(3, v4, mapspeaker);//查看比赛结果

	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值