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

news2024/9/21 20:30:16

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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 函数将输入字符串分割并转为整数 mn,代表评委数量和选手数量。如果输入格式不正确,捕获异常并输出 -1

2. 检查范围

代码部分
if not (3 <= m <= 10 and 3 <= n <= 100):
    print(-1)
    return
  • 功能: 检查 mn 是否在规定的范围内。如果不在范围内,输出 -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)
        return
    matrix.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] += 1

    players.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 = 4n = 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

总结

通过以上步骤,我们处理了输入数据并找出了得分最高的选手,确保了每一步有合理的错误处理和有效的结果输出。这种流程确保系统能够有效地运行并给出准确的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencascade Adaptor3d_Curve源码学习

opencascade Adaptor3d_Curve 前言 用于几何算法工作的3D曲线的根类。 适配曲线是曲线提供的服务与使用该曲线的算法所需服务之间的接口。 提供了两个派生具体类&#xff1a; GeomAdaptor_Curve&#xff0c;用于Geom包中的曲线Adaptor3d_CurveOnSurface&#xff0c;用于Geom包…

时钟缓冲器的相关知识

时钟缓冲器是比较常用的器件&#xff0c;其主要功能作用有时钟信号复制&#xff0c;时钟信号格式转换&#xff0c;时钟信号电平转换等。我们下面简单了解下&#xff1a; 1.时钟信号复制 例如ICS553芯片&#xff0c;其将单路输入时钟信号复制4份进行输出&#xff0c;输出信号具…

CSS相关修改样式、伪类样式

一、css颜色 1.颜色表示法&#xff1a; 直接以单词来表示颜色&#xff0c;如red&#xff0c;green。 2.十六进制表示法&#xff1a;&#xff08;常用&#xff09; 以#开头的6位十六进制数&#xff0c;如#000000&#xff08;#000&#xff09;。 3.RGB三原色表示法&#xff…

Spark数据倾斜解决产生原因和解决方案

1、提高shuffle操作的并行度 在对RDD执行shuffle算子时&#xff0c;给shuffle算子传入一个参数&#xff0c;比如reduceByKey(1000)&#xff0c;该参数就设置了这个shuffle算子执行 时shuffle read task的数量&#xff0c;即Spark.sql.shuffle.partitions&#xff0c;该参数代表…

AI/机器学习(计算机视觉/NLP)方向面试复习5

目录 1. GNN graph neural network 2. 0-1背包问题 3. 0-1背包问题&#xff08;一维dp&#xff09; 4. 螺旋矩阵 按顺时针顺序返回所有数 5. fasttext与glove 1. GNN graph neural network &#xff08;1&#xff09;图的基本定义 GNN的Roadmap&#xff1a;其中用的最常见…

SD卡电路设计基础

一、定义 SD卡按尺寸分类可分为三类:标准 SD 卡、Mini SD 卡和 Micro SD 卡。其中Mini SD 卡比较少见&#xff0c;标准 SD 卡因为体积较大主要用在数码相机等对体积要求不严格的地方,我们最常用的是 Micro SD 卡&#xff0c;原名Trans-flash Card (TF 卡)。 Micro SD 作用:一…

★ C++基础篇 ★ 栈和队列

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第八章----栈和队列 ~ 目录 一 容器适配器 二 deque的简单介绍 2.1 deque的原理介绍 2.2 deque vector list 的优缺点 2.2.1 vector 2.2.2 list 2.2.3 deque 2.3 为什么选择deq…

ETL数据集成丨PostgreSQL数据迁移至Hive数据库

PostgreSQL数据迁移至Hive数据库 在现代企业数据架构中&#xff0c;将数据从关系型数据库如PostgreSQL迁移到分布式数据仓库系统如Hive&#xff0c;是一项至关重要的任务&#xff0c;旨在实现数据的高效存储、处理与分析。这一过程不仅涉及技术层面的操作转换&#xff0c;还深…

unity项目打包为webgl后应用于vue项目中(iframe模式)的数据交互

参考文章&#xff1a; 1.Unity打包WebGL: 导入Vue 2.unity文档-WebGL&#xff1a;与浏览器脚本交互 3.unity与vue交互(无第三方插件&#xff09; 目录 一、前期工作1.新建.jslib文件2.新建.cs脚本3. 新建一个Text对象和button按钮对象4.添加脚本空对象UIEvent5.导出unity为w…

SpringBoot-配置加载顺序

目录 前言 样例 内部配置加载顺序 ​ 样例 小结 前言 我之前写的配置文件&#xff0c;都是放在resources文件夹&#xff0c;根据当前目录下&#xff0c;优先级的高低&#xff0c;判断谁先被加载。但实际开发中&#xff0c;我们写的配置文件并不是&#xff0c;都放…

利用CICD管道和MLOps自动化微调、部署亚马逊云科技上的AI大语言模型

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用CodeP…

DeepLearning.AI课程:从代码层面理解预训练大语言模型(Pretraining LLMs)

本文是学习 https://www.deeplearning.ai/short-courses/pretraining-llms/ 这门课的学习笔记。 What you’ll learn in this course In Pretraining LLMs you’ll explore the first step of training large language models using a technique called pretraining. You’ll …

如何从Mac 电脑恢复已删除的文件

您是否曾经不小心从Mac中删除了文件或文件夹&#xff0c;然后后来意识到您确实需要它&#xff1f;或者你有没有清空过你的垃圾桶&#xff0c;片刻后才意识到你不小心也从那里删除了一些重要文件&#xff1f;如果是&#xff0c;那么这篇博文就是为你准备的&#xff01; 今天&am…

书籍分享:【矩阵力量】豆瓣评分高达9.6,看完感叹《矩阵论》又白学了

书籍分享&#xff1a;【矩阵力量】豆瓣评分高达9.6&#xff0c;看完感叹《矩阵论》又白学了 《矩阵力量》简要介绍书籍下载链接 《矩阵力量》简要介绍 《矩阵力量》是姜伟生精心编写的线性代数的深度理解之作&#xff0c;作者将抽象的线性代数概念用通俗易懂的语言和大量生动形…

【过程管理】项目需求管理规程(Word原件)

在软件开发的过程中&#xff0c;开发人员与用户之间往往忽视有效的信息沟通&#xff0c;这常常导致开发出的软件无法满足用户的实际需求&#xff0c;进而引发不必要的返工。返工不仅为开发人员带来技术上的困扰&#xff0c;增加了人力和物力的消耗&#xff0c;还会对软件的整体…

tiktok 搜索翻页

这几天有小伙伴问tk的搜索接口的问题, 一个是搜索热门接口请求返回 {“status_code”: 0},这个使用curl_cffi的requests库改一下指纹请求就行了。 再一个就是翻页问题 细心一些比对一下翻页参数都能做到的(小伙伴以为只改个offset就完事了) 要不然你只能得到这样的结果:…

实现异形(拱形)轮播图

项目需要实现如上图所示的轮播图。 实现思路&#xff1a; 1.项目引入使用普通轮播图。 2.根据轮播图个数&#xff0c;动态给可视范围的第一个轮播图和最后一个轮播图添加样式。 代码实现&#xff1a; 经调研&#xff0c;使用slick轮播图&#xff08;官网地址 https://kenwheel…

经纬恒润再度受邀参加中国一汽红旗供应链创新科技展

中国一汽红旗“技领时代&#xff0c;智创未来”第六届供应链创新科技展在长春一汽总部旗境空间隆重举行&#xff0c;经纬恒润作为中国一汽战略合作伙伴及理事会成员受邀出席&#xff0c;携最新汽车电子研发成果亮相科技展&#xff0c;副总经理范成建博士受邀出席本次开幕式。 本…

电子电气架构 --- 整车电源管理

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

【MySQL进阶】事务、存储引擎、索引、SQL优化、锁

一、事务 1.概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 例子&#xff1a;转账&#xff0c;要求扣钱和进账…