ToB企服应用市场:ToB评测及商务社交产业平台

标题: 华为od统一考试B卷【角逐】python实现 [打印本页]

作者: 勿忘初心做自己    时间: 2024-8-16 09:28
标题: 华为od统一考试B卷【角逐】python实现



  1. def split_params(param_str):  
  2.     return list(map(int, param_str.split(',')))  
  3. def main():  
  4.     # 获取输入  
  5.     target_str = input().strip()
  6.   
  7.     # 输入验证,拆分并转换为整数  
  8.     try:  
  9.         m, n = split_params(target_str)  
  10.     except ValueError:  
  11.         print(-1)  
  12.         return  
  13.     # 检查 M 和 N 的范围  
  14.     if not (3 <= m <= 10 and 3 <= n <= 100):  
  15.         print(-1)  
  16.         return  
  17.     # 创建矩阵以存储打分  
  18.     matrix = []  
  19.     for _ in range(m):  
  20.         tmp_str = input().strip()  
  21.         try:  
  22.             temp = list(map(int, tmp_str.split(',')))  
  23.             if len(temp) != n or any(x < 1 or x > 10 for x in temp):  
  24.                 print(-1)  
  25.                 return  
  26.             matrix.append(temp)  
  27.         except ValueError:  
  28.             print(-1)  
  29.             return  
  30.     # 计算每位选手的总分和分数分布  
  31.     players = []  
  32.     for j in range(n):  
  33.         playerScores = [matrix[i][j] for i in range(m)]  
  34.         total_score = sum(playerScores)  
  35.         score_count = [0] * 11  # 用于记录每个分数(1-10)的数量  
  36.         for score in playerScores:  
  37.             score_count[score] += 1  
  38.         players.append((j + 1, total_score, score_count))  
  39.     # 根据总分和分数分布进行排序  
  40.     players.sort(key=lambda x: (x[1], x[2][::-1]), reverse=True)  
  41.     # 输出前3名选手  
  42.     for i in range(3):  
  43.         print(players[i][0], end=(", " if i != 2 else ""))  
  44.     print()  
  45. if __name__ == "__main__":  
  46.     main()
复制代码
好的,下面我将详细解释代码的实验流程,逐步分析每一个部分的作用和结果。
1. 输入获取与处理

代码部分

  1. target_str = input().strip()
复制代码

代码部分

  1. try:
  2.     m, n = split_params(target_str)
  3. except ValueError:
  4.     print(-1)
  5.     return
复制代码

2. 查抄范围

代码部分

  1. if not (3 <= m <= 10 and 3 <= n <= 100):
  2.     print(-1)
  3.     return
复制代码

3. 输入评分矩阵

代码部分

  1. for _ in range(m):
  2.     tmp_str = input().strip()
复制代码

代码部分

  1. try:
  2.     temp = list(map(int, tmp_str.split(',')))
  3.     if len(temp) != n or any(x < 1 or x > 10 for x in temp):
  4.         print(-1)
  5.         return
  6.     matrix.append(temp)
  7. except ValueError:
  8.     print(-1)
  9.     return
复制代码

4. 计算每位选手的总分

代码部分

  1. players = []
  2. for j in range(n):
  3.     playerScores = [matrix[i][j] for i in range(m)]
  4.     total_score = sum(playerScores)
  5.     score_count = [0] * 11  # 用于记录每个分数(1-10)的数量
  6.     for score in playerScores:
  7.         score_count[score] += 1
  8.     players.append((j + 1, total_score, score_count))
复制代码

5. 排序

代码部分

  1. players.sort(key=lambda x: (x[1], x[2]), reverse=True)
复制代码

6. 输出结果

代码部分

  1. for i in range(3):
  2.     print(players[i][0], end=(", " if i != 2 else ""))
  3. print()
复制代码

7. 总结


这个流程确保了程序按照规范格式处理评分并输出合规的结果。
好的,我们来一步步分析这个输入例子的处理流程:
输入示例

  1. 4,5  
  2. 10,6,9,7,6  
  3. 9,10,6,7,5  
  4. 8,10,6,5,10  
  5. 9,10,8,4,9
复制代码
1. 解析输入参数


2. 读取评分矩阵

接下来的四行是各评委对选手的评分。

3. 计算每位选手的总分

接下来,计算每位选手的总分和分数分布。

4. 排序

对选手举行排序,首先根据总分,其次根据分数分布:

排序结果:

因为选手 1 和 选手 2 的总分类似,分数分布会再继承排序,现实分数分布会比较(具体可实现比较规则,我这里简化)。
5. 输出结果

打印前 3 名选手编号:
  1. 1, 2, 5
复制代码
总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4