案例练习:演讲比赛
演讲比赛:
比赛规则: 某市举行一场演讲比赛( speech_contest ),共有 24 个人参加。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。
比赛方式:分组比赛,每组 6 个人;选手每次要随机分组,进行比赛; 第一轮分为 4 个小组,每组 6 个人。比如编号为: 100-123. 整体进行抽签 (draw)后顺序演讲。当小组演讲完后,淘汰组内排名最后的三个选手,然后继 续下一个小组的比赛。 第二轮分为 2 个小组,每组 6 人。比赛完毕,淘汰组内排名最后的三个选手,然 后继续下一个小组的比赛。 第三轮只剩下 1 组 6 个人,本轮为决赛,选出前三名。
比赛评分:10 个评委 打分,去除最低、最高分,求平均分每个选手演讲完由 10 个评委分别打分。该选 手的最终得分是去掉一个最高分和一个最低分,求得剩下的 8 个成绩的平均分。 选手的名次按得分降序排列。 用 STL 编程,求解这个问题
1) 请打印出所有选手的名字与参赛号,并以参赛号的升序排列。
2) 打印每一轮比赛后,小组比赛成绩和小组晋级名单 需求分析:
产生选手 ( ABCDEFGHIJKLMNOPQRSTUVWX) 姓名、得分; 选手编号 第 1 轮 选手抽签 选手比赛 查看比赛结果 第 2 轮 选手抽签 选手比赛 查看比赛结果 第 3 轮 选手抽签 选手比赛 查看比赛结果 实现思路: 需要把选手信息、选手得分信息、选手比赛抽签信息、选手的晋级信 息保存在容器中,需要涉及到各个容器的选型。 选手可以设计一个类 Speaker (姓名和得分) 所有选手的编号可以单独放在一个 vector 容器中,做抽签用 所有选手编号和选手信息,可以放在容器内:map 所有选手的编号名单,可以放在容器:vecter v1 中 第 1 轮晋级编号名单,可以放在容器 vecter v2 中 第 2 轮晋级编号名单,可以放在容器 vecter v3 中 第 3 轮前三名名单,可以放在容器 vecter v4 中 每个小组的比赛得分信息,按照从大到小的顺序放在 multimap中 每 个选手的得分,可以放在容器 deque dscore; 方便去除最低最高分.
https://ewm.proedu.com.cn/previewIndex/1091696
#include <algorithm>
#include <array>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <string>
#include <vector>
using namespace std;class Player {public:// 创建选手列表void creatPlayer(map<int, Player>& playerList, vector<int>& playerId);// 抽签void select(vector<int>& playerId);// 比赛void sartMatch(int round,vector<int>& playerId,map<int, Player>& playerList,vector<int>& mLevelList);// 显示选择比赛信息void showInfor(int round,vector<int>& vLevelList,map<int, Player>& mPlayersList);private:string mName;array<int, 3> mScore; // 3场比赛的分数
};// 创建选手列表
void Player::creatPlayer(map<int, Player>& playerList, vector<int>& playerId) {string nameSeed = "ABCDEFGHIJKLMNOPQRSTUVWX"; // 选手名字random_shuffle(nameSeed.begin(), nameSeed.end()); // 打乱顺序for (int i = 0; i < 24; i++) {Player p;p.mName = nameSeed[i];int joinId = 100 + i;playerList.insert(make_pair(joinId, p)); // 将选手信息加入playerId.push_back(joinId);}
}// 抽签
void Player::select(vector<int>& playerId) {srand((unsigned int)time(NULL));random_shuffle(playerId.begin(), playerId.end()); // 打乱选手Id
}// 比赛
void Player::sartMatch(int round,vector<int>& playerId,map<int, Player>& playerList,vector<int>& mLevelList) {srand((unsigned int)time(NULL));// 保存分组信息, multimap<分数,编号> 默认升序;此处使用greater进行降序multimap<int, int, greater<int>> mGroups;for (vector<int>::iterator it = playerId.begin(); it != playerId.end();++it) {deque<int> dScores; // 分数容器for (int i = 0; i < 10; i++) {int score = rand() % 50 + 50;dScores.push_back(score);}// 排序后删除最大最小,求平均值sort(dScores.begin(), dScores.end(), greater<int>());dScores.pop_back();dScores.pop_front();int avg =accumulate(dScores.begin(), dScores.end(), 0) / dScores.size();playerList[*it].mScore[round - 1] = avg;mGroups.insert(make_pair(avg, *it));if (mGroups.size() == 6) {multimap<int, int>::iterator mit = mGroups.begin();for (int j = 0; j < 3; j++) { // 组内胜利的前3晋级mLevelList.push_back(mit->second);++mit;}mGroups.clear();}}
}// 显示选手信息
void Player::showInfor(int round,vector<int>& vLevelList,map<int, Player>& mPlayersList) {cout << "第" << round << "轮比赛晋级名单如下:" << endl;for (auto id : vLevelList) {cout << "Score " << mPlayersList[id].mScore[round - 1]<< " Name:" << mPlayersList[id].mName << endl;}cout << "----------------------------\n";
}int main(int argc, char** argv) {Player player;map<int, Player> mPlayersList;vector<int> playerId;player.creatPlayer(mPlayersList, playerId);vector<int> vLevelList1; // 第1场比赛的选手晋级名单vector<int> vLevelList2; // 第2场比赛的选手晋级名单vector<int> vLevelList3; // 第3场比赛的选手晋级名单player.select(playerId); // 抽签player.sartMatch(1, playerId, mPlayersList, vLevelList1); // 参加比赛player.showInfor(1, vLevelList1, mPlayersList); // 晋级名单player.select(vLevelList1); // 抽签player.sartMatch(2, vLevelList1, mPlayersList, vLevelList2); // 参加比赛player.showInfor(2, vLevelList2, mPlayersList); // 晋级名单player.select(vLevelList2); // 抽签player.sartMatch(3, vLevelList2, mPlayersList, vLevelList3); // 参加比赛player.showInfor(3, vLevelList3, mPlayersList); // 晋级名单return 0;
}
相关文章:
案例练习:演讲比赛
演讲比赛: 比赛规则: 某市举行一场演讲比赛( speech_contest ),共有 24 个人参加。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。 比赛方式:分组比赛,每组 6 个人;选手每次…...

推荐一个很好用的Latex写代码的软件
软件名称:Axmath 据说是国产软件,好用是真好用(去哪找?比如某地球号的公主号或其他地方)我是推荐付费购买使用 1.通过图形操作,选择要转成Latex代码的符号,按下转换,直接就出现了我…...
windows 程序右键管理员点击无响应
Windows 程序在右键单击以管理员身份运行时没有响应,可能是由于多种原因引起的。下面是一些常见的问题和解决方案: 1. 用户账户控制 (UAC) 设置问题: - 试着降低或提高 UAC 设置,然后再试一次。可以在控制面板的“用户账户”部…...

开发基于Java语言的SaaS(Software-as-a-Service,软件即服务)模式的HIS系统详解 HIS系统源码 支持二开
开发基于Java语言的SaaS(Software-as-a-Service,软件即服务)模式的HIS系统详解 HIS系统源码 支持二开 开发基于Java语言的SaaS(Software-as-a-Service,软件即服务)模式的HIS(Hospital Informat…...

关于微信小程序(必看)
前言 为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则…...
Activity中Context
Activity中Context在activity.attach()设置,所以Application中Context为ContextImpl appContext createBaseContextForActivity(r);,即在ContextImpl.createActivityContext()设置DispalyId private ContextImpl createBaseContextForActivity(Activit…...

位图法-有效的数独
有效的数独,主要是判断每行每列每宫有无重复元素。 每行每列用二重循环,每宫比较复杂,需要考虑每一宫的坐标与二重循环ij对应关系 行i,每一宫3行,3列 x3*(i/3)j/3 y3*(i%3)j%3...
Zookeeper ZNode 数据结构原理
ZNode 学习指南 1. ZNode 基本概念 什么是 ZNode:ZNode 是 Zookeeper 中的数据节点。它类似于文件系统中的文件和目录,ZNode 既可以保存数据又可以作为其他 ZNode 的父节点。ZNode 的路径:每个 ZNode 在 Zookeeper 命名空间中都有一个唯一的路径,如 /app1/config。2. ZNod…...
Golang - 90天从新手到大师
开篇 最近有很多小伙伴都在寻找go语言完整学习资料,我整理了一些Golang方面的知识,方便大家学习。内容从最基础的入门到项目设计,希望帮助更多想了解和学习Go语言的伙伴。 因为是持续创作,所以也会持续更新。有些章节目录还没有…...
MyBatis常用转义字符 大于、小于、大于等于、小于等
在Mybatis编写特殊常用字符你会发现会报错,比如常用的<,>,<,> 等,原因是与xml文件的元素<>冲突,所以需要转义。整理转义字符如下: 符号原始字符转义字符大于>>大于等于>>小于<<小于等于<<和&…...

Python --- 如何修改Jupyter Notebook在本地保存文件的默认路径?
如何修改Jupyter Notebook在本地保存文件的默认路径? 一直以来都比较喜欢jupter notebook,自从用了以后就爱上了。平时用的时候,因为大多都是临时调用,每次在界面里直接new一个新的file就开干。 曾经也想过我创建的这些python文件…...
大模型 舆情分析 数据构造 prompt提示词 经验分享 数据准备
最近在做舆情分析,需要执行比较复杂的任务流程(例如同时执行人名识别、相关机构识别、90分类),传统Bert无法胜任,因此尝试使用大模型进行处理。 下面的一些提示词是我用来准备数据的,这些数据可以按照不同…...

这些已经死去的软件,依旧无可替代
互联网这条长河里,软件们就像流星一样,一闪而过。有的软件火过一段时间,然后就慢慢消失了。 说不定有些软件你以前天天用,但不知道从什么时候开始就不再用了。时间一天天过去,我们的热情、记忆都在消退,还…...

SYD88xx使代码在RAM内存中执行/运行
SYD88xx使代码在RAM中执行 SYD8811/8810默认都是cache模式的,但是在代码首次运行的时候,需要将代码从flash搬到cache中执行,这样第一次的代码执行可能会比较慢,这里提供一个将需要提速的代码放到RAM中执行的方法。 对于SYD8811…...

基于支持向量机的垃圾邮件分类,使用SVM+flask+vue
sms-classify 基于支持向量机的垃圾邮件分类,使用SVMflaskvue 数据集和源码地址 数据集 SMS Spam Collection Data Set 来源于 UCI。样例被分为非垃圾邮件(86.6%)和垃圾邮件(13.4%),数据格式如下ÿ…...

目标检测数据集 - 零售食品LOGO检测数据集下载「包含VOC、COCO、YOLO三种格式」
数据集介绍:零售食品 LOGO 检测数据集,真实零售食品 LOGO 高质量商品图片数据,数据集含常见零售食品 LOGO 图片,包括饮料类、酒类、调味品类、膨化饼干类、巧克力类、常见零食类等等。数据集类别丰富,标注标签包含 150…...

47.PyCharm P版突然无法启动
目录 1.启动cmd.exe,进到pycharm\bin目录,启动.\pycharm.bat,如果正常,就像下面这个样子,如果不正常,则会报错, 2.用记事本打开pycharm.bat文件,加上以下代码后 今晨,无…...

「动态规划」如何求粉刷房子的最少花费?
LCR 091. 粉刷房子https://leetcode.cn/problems/JEj789/description/ 假如有一排房子,共n个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。当然,因为市…...
代码随想录算法训练营DAY41|背包问题 二维 、背包问题 一维、416. 分割等和子集
背包问题 二维 题目链接:背包问题 二维 def bag_weight_problem(n,space,weight,value):dp [[0 for i in range(space1)]for j in range(n)]for i in range(weight[0], space1):dp[0][i]value[0]for j in range(1, n):for k in range(space1):if weight[j]>k:…...

gitlab2024最新版安装
系统:redhat9.0 gitlab版本:gitlab-ce-16.10.7-ce.0.el9.x86_64.rpm 安装组件&包依赖:https://packages.gitlab.com/gitlab/gitlab-ce/packages/ol/9/gitlab-ce-16.10.7-ce.0.el9.x86_64.rpm 参考: 前提: 下载gitl…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
python打卡day49@浙大疏锦行
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...

基于django+vue的健身房管理系统-vue
开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...
八、【ESP32开发全栈指南:UDP客户端】
1. 环境准备 安装ESP-IDF v4.4 (官方指南)确保Python 3.7 和Git已安装 2. 创建项目 idf.py create-project udp_client cd udp_client3. 完整优化代码 (main/main.c) #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h&…...

Redis专题-实战篇一-基于Session和Redis实现登录业务
GitHub项目地址:https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码:e34399f 基于Redis实现登录业务提交版本码:60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...