华为od统一考试B卷【比赛】python实现



def split_params(param_str): return list(map(int, param_str.split(','))) def main(): # 获取输入 target_str = input().strip() # 输入验证,拆分并转换为整数 try: m, n = split_params(target_str) except ValueError: print(-1) return # 检查 M 和 N 的范围 if not (3 <= m <= 10 and 3 <= n <= 100): print(-1) return # 创建矩阵以存储打分 matrix = [] for _ in range(m): tmp_str = input().strip() try: temp = list(map(int, tmp_str.split(','))) if len(temp) != n or any(x < 1 or x > 10 for x in temp): print(-1) return matrix.append(temp) except ValueError: print(-1) return # 计算每位选手的总分和分数分布 players = [] for j in range(n): playerScores = [matrix[i][j] for i in range(m)] total_score = sum(playerScores) score_count = [0] * 11 # 用于记录每个分数(1-10)的数量 for score in playerScores: score_count[score] += 1 players.append((j + 1, total_score, score_count)) # 根据总分和分数分布进行排序 players.sort(key=lambda x: (x[1], x[2][::-1]), reverse=True) # 输出前3名选手 for i in range(3): print(players[i][0], end=(", " if i != 2 else "")) print() if __name__ == "__main__": main()
好的,下面我将详细解释代码的执行流程,逐步分析每一个部分的作用和效果。
1. 输入获取与处理
代码部分
target_str = input().strip()
- 功能: 从用户获取输入,使用
strip()去掉多余的空格或换行。
代码部分
try:m, n = split_params(target_str)
except ValueError:print(-1)return
- 功能: 使用
split_params函数将输入字符串分割并转为整数m和n,代表评委数量和选手数量。如果输入格式不正确,捕获异常并输出-1。
2. 检查范围
代码部分
if not (3 <= m <= 10 and 3 <= n <= 100):print(-1)return
- 功能: 检查
m和n是否在规定的范围内。如果不在范围内,输出-1。
3. 输入评分矩阵
代码部分
for _ in range(m):tmp_str = input().strip()
- 功能: 用循环读取每一位评委的打分。
代码部分
try:temp = list(map(int, tmp_str.split(',')))if len(temp) != n or any(x < 1 or x > 10 for x in temp):print(-1)returnmatrix.append(temp)
except ValueError:print(-1)return
- 功能:
- 将每个评委的分数通过逗号分割并转为整数。
- 检查分数是否符合要求(分数数量是否为
n、分数是否在1到10的范围内)。 - 如果任何条件不符合,输出
-1。
4. 计算每位选手的总分
代码部分
players = []
for j in range(n):playerScores = [matrix[i][j] for i in range(m)]total_score = sum(playerScores)score_count = [0] * 11 # 用于记录每个分数(1-10)的数量for score in playerScores:score_count[score] += 1players.append((j + 1, total_score, score_count))
- 功能:
- 初始化一个列表
players来存储每位选手的信息。 - 对于每一位选手
j,构建一个playerScores列表来存储所有评委对该选手的评分。 - 使用
sum计算该选手的总得分,并构建score_count数组来统计每个分数(从1到10)的数量。 - 将选手编号(
j+1)、总分和分数分布以元组的形式存入players列表。
- 初始化一个列表
5. 排序
代码部分
players.sort(key=lambda x: (x[1], x[2]), reverse=True)
- 功能:
- 对
players列表进行排序,首先根据总分(x[1])排序,再根据分数分布(x[2])进行次排序,以确保分数高的选手排在前面。
- 对
6. 输出结果
代码部分
for i in range(3):print(players[i][0], end=(", " if i != 2 else ""))
print()
- 功能:
- 输出前 3 名选手的编号,每个编号用逗号分隔。
- 最后使用
print()输出一个换行。
7. 总结
- 整体逻辑是:先读取和验证输入,然后读取评分数据,计算每位选手的总得分和分数分布,进行排序,并最终输出前 3 名选手的编号。
- 任何时候只要发现不合规的输入,都会及时输出
-1,确保程序的健壮性。
这个流程确保了程序按照规范格式处理评分并输出合规的结果。
好的,我们来一步步分析这个输入例子的处理流程:
输入示例
4,5
10,6,9,7,6
9,10,6,7,5
8,10,6,5,10
9,10,8,4,9
1. 解析输入参数
- 第一行:
4,5- 使用
split_params函数处理这行字符串,将其分割为m = 4和n = 5。 - 判断范围:
3 <= 4 <= 10(✓),3 <= 5 <= 100(✓),符合要求。
- 使用
2. 读取评分矩阵
接下来的四行是各评委对选手的评分。
-
第二行:
10,6,9,7,6- 将其转为整数列表:
[10, 6, 9, 7, 6] - 检查条件:长度为 5(✓),所有分数在 1 到 10 之间(✓)。
- 添加到矩阵中。
- 将其转为整数列表:
-
第三行:
9,10,6,7,5- 转为
[9, 10, 6, 7, 5]。 - 检查条件:长度为 5(✓),所有分数在 1 到 10 之间(✓)。
- 添加到矩阵中。
- 转为
-
第四行:
8,10,6,5,10- 转为
[8, 10, 6, 5, 10]。 - 检查条件:长度为 5(✓),所有分数在 1 到 10 之间(✓)。
- 添加到矩阵中。
- 转为
-
第五行:
9,10,8,4,9- 转为
[9, 10, 8, 4, 9]。 - 检查条件:长度为 5(✓),所有分数在 1 到 10 之间(✓)。
- 添加到矩阵中。
- 转为
3. 计算每位选手的总分
接下来,计算每位选手的总分和分数分布。
-
选手 1 (编号 1):
- 评分:
[10, 9, 8, 9] - 总分:
10 + 9 + 8 + 9 = 36 - 分数分布:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3](1 分: 0,2 分: 0,……,9 分: 3,10 分: 1)
- 评分:
-
选手 2 (编号 2):
- 评分:
[6, 10, 10, 10] - 总分:
6 + 10 + 10 + 10 = 36 - 分数分布:
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3]
- 评分:
-
选手 3 (编号 3):
- 评分:
[9, 6, 6, 8] - 总分:
9 + 6 + 6 + 8 = 29 - 分数分布:
[0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1]
- 评分:
-
选手 4 (编号 4):
- 评分:
[7, 7, 5, 4] - 总分:
7 + 7 + 5 + 4 = 23 - 分数分布:
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 2]
- 评分:
-
选手 5 (编号 5):
- 评分:
[6, 5, 10, 9] - 总分:
6 + 5 + 10 + 9 = 30 - 分数分布:
[0, 0, 0, 0, 0, 1, 0, 1, 0, 2, 1]
- 评分:
4. 排序
对选手进行排序,首先根据总分,其次根据分数分布:
- 选手 1:
(1, 36, 分数分布) - 选手 2:
(2, 36, 分数分布) - 选手 5:
(5, 30, 分数分布) - 选手 3:
(3, 29, 分数分布) - 选手 4:
(4, 23, 分数分布)
排序结果:
- 选手 1:
(1, 36)(分数分布), - 选手 2:
(2, 36)(分数分布), - 选手 5:
(5, 30)(分数分布), - 选手 3:
(3, 29)(分数分布), - 选手 4:
(4, 23)(分数分布)。
因为选手 1 和 选手 2 的总分相同,分数分布会再继续排序,实际分数分布会比较(具体可实现比较规则,我这里简化)。
5. 输出结果
打印前 3 名选手编号:
1, 2, 5
总结
通过以上步骤,我们处理了输入数据并找出了得分最高的选手,确保了每一步有合理的错误处理和有效的结果输出。这种流程确保系统能够有效地运行并给出准确的结果。
相关文章:
华为od统一考试B卷【比赛】python实现
def split_params(param_str): return list(map(int, param_str.split(,))) def main(): # 获取输入 target_str input().strip() # 输入验证,拆分并转换为整数 try: m, n split_params(target_str) except ValueError: print(-1) return # 检查 M 和 …...
Prometheus 监控接入规范
目录 一、目的 二、自定义监控指标定义规范 2.1 基本命名规范 2.1.1 指标命名规范 2.1.2 标签名称 2.2 控制基数 2.2.1 避免高基数标签 2.2.2 预定义标签集 2.2.3 动态数据的处理 2.2.4 评估与监控基数 2.2.5 降低历史数据的保留 2.2.6 适当使用 Histogram 和 Summa…...
优化 SQL 查询性能:深入理解 EXPLAIN 命令
优化 SQL 查询性能:深入理解 EXPLAIN 命令 在 MySQL 数据库管理中,优化 SQL 查询性能是确保高效数据处理的关键。EXPLAIN 命令是分析和优化 SQL 查询的强大工具,它帮助我们理解查询执行计划,从而找到性能瓶颈并进行优化。本文将详细解释 EXPLAIN 命令返回的各个列的含义,…...
@Mapper报红
检查pom.xml,导入 org.mybatis.spring.boot 依赖: <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency…...
shell综合小实验1-----查看系统硬件信息
echo命令的使用 1:echo -n 不换行 echo -n “我是个大聪明” #不换行输入我是大聪明 2:echo -e 开启颜色 echo -e "\03335m我是大聪明\033[0m" #用35m这种颜色输出我是大聪明然后关闭颜色显示, 30多是字体颜色,40多是…...
【过程管理】项目需求管理规程(Word原件)
在软件开发的过程中,开发人员与用户之间往往忽视有效的信息沟通,这常常导致开发出的软件无法满足用户的实际需求,进而引发不必要的返工。返工不仅为开发人员带来技术上的困扰,增加了人力和物力的消耗,还会对软件的整体…...
C# 不使用 `async` 和 `await` 的常见场景
虽然 async 和 await 是强大的异步编程工具,但在某些情况下,不使用它们可能更合适。以下是一些不使用 async 和 await 的常见场景: 方法是完全同步的: 如果方法中的所有操作都是同步的,并且没有异步调用,则…...
adb目录笔记《adb更新、进入开发者模式,adb查询packages、adb开启应用,查询进程、强制删除进程》
1.sideload模式 在需要安卓没有root权限的时候,可以使用adb reboot sideload命令进入sideload模式,之后运行对应文件 adb reboot sideload adb sideload <root.zip> 2.packages包查询、运行、删除 在需要查看安卓中packages包的名称时…...
VS2022 C++ EasyX EGE 吃豆人升级版
我是可爱的C小盆友(不要脸了),嘻嘻,等了这么久,吃豆人终于升级啦! 更新日志: 1.修复奇奇怪怪的bug 2.把敌人AI增强了一(hen)点(duo) 3.加入了…...
计算机图形学 | 动画模拟
动画模拟 布料模拟 质点弹簧系统: 红色部分很弱地阻挡对折 Steep connection FEM:有限元方法 粒子系统 粒子系统本质上就是在定义个体和群体的关系。 动画帧率 VR游戏要不晕需要达到90fps Forward Kinematics Inverse Kinematics 只告诉末端p点,中间…...
B2.3 Arm 内存模型定义
B2.3 Arm 内存模型定义 Arm 内存模型引入了以下几种关系: 内在关系 :例如,内在数据/控制/顺序依赖关系和内在翻译之前的关系,这些是源自指令语义的硬件要求。 之后关系 :例如,之后的连贯性和 TLB 之后的关系,这些关系在特定执行中发生这种方式,但在不同的执行中可以以…...
(javaweb)SpringBootWeb案例(毕业设计)案例--部门管理
目录 1.准备工作 2.部门管理--查询功能 3.前后端联调 3.部门管理--新增功能 1.准备工作 mapper数据访问层相当于dao层 根据页面原型和需求分析出接口文档--前后端必须遵循这种规范 大部分情况下 接口文档由后端人员来编写 前后端进行交互基于restful风格接口 http的请求方式…...
PCL 采样一致性模型介绍
采样一致性可以简单高效的检测出一些具有数学表达式的目标模型。PCL中的sample consensus模块中不仅包含各种的采样一致性估计方法,也包含一些已经编写好的数学模型,下面主要介绍一下PCL中的采样一致性模型。 1. 二维圆模型 pcl::SampleConsensusModelCircle2D< PointT …...
Unity手游开放大世界解决方案
开个新坑了,分享一个手游开放大世界的解决方案,也算是我开发研究了一年多的结果吧。之前项目需要,做了一整套的手游开放大世界解决方案,这里做一个总结归纳,将所需要的技术栈和解决方案等汇总。 这篇文章只是起头一个目…...
mysql B+ 树
问题: mysql innodb引擎 B树主键自增,插入数据时是从中间分裂,还是使用页尾部元素作为父节点的值然后添加一个新页,或者说主键连续自增,mysql有没有做这样的优化? 以下是Chat GPT给出的回答:...
Sublime Text常用快捷键大全
Sublime Text 是一款功能强大且广受欢迎的文本编辑器,其丰富的快捷键支持使得开发者能够更高效地编写和编辑代码。以下是 Sublime Text 中一些常用的快捷键,帮助你更加高效地使用这款工具: 功能分类快捷键 (Windows)快捷键 (Mac)新建文件Ctr…...
中成科信票务管理系统 TicketManager.ashx接口SQL注入漏洞复现 [附POC]
文章目录 中成科信票务管理系统 TicketManager.ashx接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议中成科信票务管理系统 TicketManager.ashx接口SQL注入漏洞复现 [附POC] 0x01 前言 …...
设计模式六大原则之:依赖倒置原则
1. 依赖倒置原则简介 依赖倒置原则(Dependency Inversion Principle, DIP) 是面向对象设计的核心原则之一,由罗伯特马丁(Robert C. Martin)提出,旨在降低类间的依赖度,使之更易于维护和扩展。该原则主张高层模块不应该依赖于底层模块&#x…...
06_Linux中如何让程序重启后自动启动
Linux中如何让程序重启后自动启动 systemd单元文件1.创建服务文件!!!服务配置文件的介绍 2.需要配置服务的状态(加载和启用服务)3.验证服务程序的运行状态4.打印程序的标准输出 systemd单元文件 Systemd 是现代 Linux…...
优化业务流程的关键:深入探讨BPA流程设计
在当前竞争激烈的商业环境中,业务流程自动化(BPA)已经成为企业提升效率、减少成本和提高业务灵活性的关键工具。今天,我们将深入探讨BPA流程设计的重要性及其实施步骤,为企业提供实用的指南。 什么是BPA? …...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...
