演讲比赛流程

1)某市举行一场演讲比赛,共有 24 个人参加,按参加顺序设置参赛号。比赛共三轮,前两 轮为淘汰赛,第三轮为决赛。
2)比赛方式:分组比赛

  1. 第一轮分为 4 个小组,根据参赛号顺序依次划分,比如 100-105 为一组,106-111 为第 二组,依次类推,每组 6 个人,每人分别按参赛号顺序演讲。当小组演讲完后,淘汰组内排 名最后的三个选手,然后继续下一个小组的比赛。
  2. 第二轮分为 2 个小组,每组 6 人,每个人分别按参赛号顺序演讲。当小组完后,淘汰组 内排名最后的三个选手,然后继续下一个小组的比赛。
  3. 第三轮只剩下 6 个人,本轮为决赛,选出前三名。

3). 选手每次要随机分组,进行比赛。

4)比赛评分:10 个评委打分,去除最低、最高分,求平均分 每个选手演讲完由 10 个评委分别打分。该选手的最终得分是去掉一个最高分和一个最 低分,求得剩下的 8 个成绩的平均分。选手的名次按得分降序排列,若得分一样,按参赛号 升序排名。

需解决问题

1) 请打印出所有选手的名字与参赛号,并以参赛号的升序排列。
2) 打印每一轮比赛前,分组情况
3) 打印每一轮比赛后,小组晋级名单
4) 打印决赛前三名,选手名称、成绩。

#include<iostream>
#include<vector>
#include<map>
using namespace std;
#include<string>
#include<algorithm>
#include<deque>
#include<numeric>
#include<functional>
class Speaker
{
public:string m_Name;//姓名int m_Score[3];//得分数组};//创建选手函数
void createSpeaker(vector<int>&v, map<int,Speaker>&m)
{string nameSeed = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//创建选手for (int i = 0; i < 24; ++i){string name = "选手";name += nameSeed[i];Speaker sp;sp.m_Name = name;//得分初始化for (int j = 0; j < 3; j++){sp.m_Score[j] = 0;}//将选手放到容器中v.push_back(i + 100);//编号100~123m.insert(make_pair(i + 100, sp));}}//抽签函数
void speechDraw(vector<int >v)
{//洗牌random_shuffle(v.begin(), v.end());
}//比赛函数
// 1 第几轮得分  2 v1比赛选手编号,3 m是选手编号和具体选手   4 v2晋级选手编号容器
void speechContest(int index,vector<int>&v1, map<int, Speaker>&m, vector<int>&v2)
{//临时容器multimap<int, int, greater<int>>groupMap;//分数 编号int num = 0;for (vector<int>::iterator it = v1.begin(); it != v1.end(); it++){num++;deque<int>d;for (int i = 0; i < 10; i++){//分数随机给int score = rand() % 41 + 60;//60~100d.push_back(score);}//排序sort(d.begin(), d.end());//去除最高最低分d.pop_back();d.pop_front();//累计分数int sum = accumulate(d.begin(),d.end(),0);int avg = sum / d.size();//将平均分 放入到m容器中//第几轮的得分m[*it].m_Score[index - 1] = avg;//每6个人取前三名 晋级 进入v2容器//临时容器保存6个人,晋级完后清空,再进入6个人//临时容器,存入数据groupMap.insert(make_pair(avg, *it));if (num % 6 == 0)  //够6个人进入{/*cout << "小组比赛成绩如下:" << endl;for (multimap<int, int, greater<int>>::iterator mit = groupMap.begin(); mit != groupMap.end(); mit++){cout << "编号:" << mit->second << "姓名:" << m[mit->second].m_Name << "得分:" << m[mit->second].m_Score[index - 1] << endl;}
*///取前三名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[index - 1]<<endl;}cout << "晋级选手编号:" << endl;for (vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << endl;}
}int main()
{vector<int>v1;//放选手编号map<int, Speaker> m ;//存放选手编号,和队医你个的具体选手//创建选手createSpeaker(v1, m);//抽签speechDraw(v1);//比赛vector<int>v2;//进入下一轮比赛的人员编号speechContest(1,v1, m, v2);//显示比赛结果showScore(1,v2,m);//轮数,晋级编号,具体的人员信息//第二轮比赛speechDraw(v2);vector<int>v3;//第三轮的容器speechContest(2, v2, m, v3);showScore(2, v3, m);//第三轮比赛speechDraw(v3);vector<int>v4;//第四轮的容器,也就是最后的容器speechContest(3, v3, m, v4);showScore(2, v4, m);/*for (map<int,Speaker>::iterator it = m.begin(); it != m.end(); it++){cout << "编号:" << it->first << "姓名:" << it->second.m_Name << endl;}*/system("pause");return 0;
}



c++中STL实现演讲比赛流程相关推荐

  1. c++小项目:基于STL的演讲比赛流程管理系统

    一.项目目的 运用c++实现一个基于STL的演讲比赛流程管理系统. 比赛方式 共两轮,第一轮为分组淘汰赛,第二轮为决赛,共有十名评委,打分方式为去掉最高分和最低分的平均分为基准 第一轮共两组,每组六人 ...

  2. 基于STL的演讲比赛流程管理系统

    一.关于这个管理系统所要实现的功能 1.12名种子选手进行轮次比赛. 2.共进行两轮比赛,第一轮分两组进行演讲比赛经过评委打分决出下一轮比赛的选手,第二轮总决赛选出前三名选手(演讲顺序依抽签为准!)( ...

  3. C++基于STL的演讲比赛流程管理系统

    目录 介绍 speaker.h speechManager.h speechManager.cpp 演讲比赛流程管理系统.cpp 介绍 学校举行一场演讲比赛,共有12个人参加.比宴共两轮,第一轮为淘汰 ...

  4. C++阶段06笔记01【基于STL的演讲比赛流程管理系统】

    C++匠心之作-从0到1入门学编程[视频+课件+笔记+源码] 目录 1.演讲比赛程序需求 1.1.比赛规则 1.2.程序功能 1.3.程序效果图 2.项目创建 2.1.创建项目 2.2.添加文件 3. ...

  5. 基于STL的演讲比赛流程管理系统(C++STL实战)

    目录 1.演讲比赛程序需求 1.1比赛规则 1.2程序功能 2.项目创建 3.创建管理类 3.1创建文件 3.2头文件实现 3.3源文件实现 4.菜单功能 4.1添加成员函数 4.2菜单功能实现 4. ...

  6. 黑马程序员:C++案例(基于STL实现演讲比赛流程管理系统)

    1.1.比赛规则 学校举行一场演讲比赛,共有12个人参加,比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如10001~10012 比赛方式:分组比赛,每组6个人: 第一轮分为两个小 ...

  7. C++提高编程(六)—— 案例 :演讲比赛流程管理系统(上)

    C++系列内容的学习目录 → \rightarrow →C++学习系列内容汇总. 1. 演讲比赛程序需求 1.1 比赛规则 1.2 程序功能 1.3 程序效果图 2. 创建项目 3. 创建管理类 3. ...

  8. (史上最详细)C++实战-基于STL 演讲比赛流程管理系统

    项目需求 本案例来源于黑马 C++视频课程,以下内容为学习笔记 1.1 比赛规则 学校举行一场演讲比赛,共有12个人参加.比赛共两轮,第一轮为淘汰赛,第二轮为决赛. 比赛方式:分组比赛,每组6个人:选 ...

  9. C++实现演讲比赛流程管理系统

    文章目录 1.演讲比赛程序需求 1.1比赛规则 2.项目创建 2.1创建项目 2.2 添加文件 3.创建管理类 3.1 创建文件 4.菜单功能 4.1 添加成员函数 4.2 菜单功能实现 4.3 测试 ...

最新文章

  1. Android开发技术周报176学习记录
  2. 在JBuilder8在使用ANT
  3. debian下运行netstat失败
  4. 信号之函数的可重入性
  5. 【转】肺小结节就诊指南:4种CT的区别及如何选择?
  6. python中的字符串操作及注意事项
  7. 重庆文件服务器,重庆filecoin服务器
  8. MeiTuanLocateCity
  9. 数据转换软件公司——HYFsoft
  10. 自定义 Dialog --- 仿照微信删除联系人界面
  11. 上下相机贴合对位计算公式_ccd视觉自动对位贴合机主要应用在哪里?
  12. java extjs combobox_Extjs 教程三 “combobox”
  13. ca证书申请流程有哪些?
  14. 自己编写的C语言实时时钟代码
  15. npz文件转为npy_numpy文件存取-npz,npy
  16. 综合微软、AMiner两大学术图谱,清华大学唐杰博士如何将Open Academic Graph亿级数据精准匹配
  17. CNTV CBOX的服务项
  18. ZYNQ UltraScale MPSOC,使用PL端AXI_UART16550IP核,且在PS端控制下实现RS485通信-----轮询方式
  19. redis-manger集群管理工具
  20. SAP PP 空bom 清单及处理

热门文章

  1. BZOJ1191: [HNOI2006]超级英雄Hero(二分图匹配)
  2. Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)
  3. mysql 5.1由于Host为localhost的用户为空,密码为空,导致本地用户无法登陆。
  4. 停止Hadoop或HBase集群的脚本
  5. 自定义django的Template context processors
  6. POJ 2421 Constructing Roads MST kruskal
  7. 如何在 C# 中用 SharpZipLib 进行 ZIP 压缩与解压(转)
  8. Windows 7 / Vista 分区问题
  9. 计算机硬件系统的构成教学设计,2.1 计算机硬件系统教学设计思路
  10. java memcache 队列_基于memcache的java分布式队列实现。