案例练习:演讲比赛
演讲比赛:
比赛规则: 某市举行一场演讲比赛( 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…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...