项目案例
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; }