【编程题训练】统计射击比赛成绩
题目描述
给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。
条件如下:
- 一个选手可以有多个射击成绩的分数,且次序不固定。
- 如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手。
- 如果选手的成绩之和相等,则成绩之和相等的选手按照其ID降序排列。
输入描述:
- 输入第一行,一个整数N,表示该场比赛总共进行了N次射击,产生N个成绩分数(2<=N<=100)。
- 输入第二行,一个长度为N整数序列,表示参与每次射击的选手ID(0<=ID<=99)。
- 输入第三行,一个长度为N整数序列,表示参与每次射击的选手对应的成绩(0<=成绩<=100)。
输出描述:
符合题设条件的降序排名后的选手ID序列。
示例1
输入
13
3,3,7,4,4,4,4,7,7,3,5,5,5
53,80,68,24,39,76,66,16,100,55,53,80,55
输出
5,3,7,4
说明
- 该场射击比赛进行了13次,参赛的选手为{3,4,5,7}。 3号选手成绩:
- 53,80,55,最高3个成绩的和为:80+55+53=188。
- 4号选手成绩:24,39,76,66,最高3个成绩的和为:76+66+39=181。
- 5号选手成绩:53,80,55,最高3个成绩的和为:80+55+53=188。
- 7号选手成绩:68,16,100,最高3个成绩的和为:100+68+16=184。
- 比较各个选手最高3个成绩的和,有3号=5号>7号>4号,由于3号和5号成绩相等且ID号5>3, 所以输出为:5,3,7,4
参考代码
def id_grade(N: int, id: list, grade: list):dic = {}# 遍历id,grade两个列表,将相同id的成绩存到列表list1中,再利用字典键值# 对的唯一性去除重复创建的list1,只保留不同id对应的成绩列表。for i in range(N):list1 = []for j in range(N):if id[j] == id[i]:list1.append(grade[j])dic[id[i]] = list1keys_list = list(dic.keys())values_list = list(dic.values())'''遍历所有成绩列表,除掉成绩数不足三次列表,如果超过三次则降序排列取前三次成绩再求和(ps:这里遍历的时候注意要用索引值做循环,不可以循环列表,因为如果两个选手的最终成绩一样,最后修改字典是需要根据成绩对应的索引值去找到相同索引值得键值去进行修改,但成绩不具备唯一性,反推的索引值可能不准确)'''for k in range(len(values_list)):if len(values_list[k]) < 3:dic.pop(keys_list[k])else:values_list[k].sort(reverse=True)value = sum(values_list[k][:3])dic[keys_list[k]] = value# 错误代码# for k in values_list:# if len(k) < 3:# dic.pop(k)# else:# k.sort(reverse=True)# value = sum(k[:3])# dic[keys_list[values_list.index(k)]] = valuelist2 = sorted(dic.items(), key=lambda x: (x[1], x[0]), reverse=True)list3 = [str(l[0]) for l in list2]return ','.join(list3)assert id_grade(13, [3, 3, 7, 4, 4, 4, 4, 7, 7, 3, 5, 5, 5],[53, 80, 68, 24, 39, 76, 66, 16, 100, 55, 53, 80, 55]) == '5,3,7,4'
心得
- 循环套循环是可以实现构造一个一对多的嵌套列表的字典,需要充分利用列表键值对的唯一性,先在外层循环中创建一个新列表,再在内层循环中找到和外层循环值对应的值,添加到列表中,再构造键值对,重复的键值对只会覆盖不会增加
- 当需要通过元素索引值去反推对应值所在的位置时,不要用不具有唯一性的元素
【编程题训练】统计射击比赛成绩相关推荐
- 【算法题】统计射击比赛成绩
统计射击比赛成绩 package collections;import java.io.BufferedReader; import java.io.IOException; import java. ...
- 【华为OD机试真题 Java】统计射击比赛成绩
前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...
- 【华为OD机试真题 Python】统计射击比赛成绩
前言:本专栏将持续更新华为OD机试题目,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你.关于OD机试流程.面经.面试指导等,如有任何疑问,欢迎联系我,wechat:steven ...
- 华为OD机试真题 Python 实现【统计射击比赛成绩】
目录 题目 思路 考点 Code 题目 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列.条件如下: 1.一个选手可 ...
- 【华为机试真题Java】统计射击比赛成绩
目录 题目描述 输入描述 输出描述 参考示例 参考代码 机试介绍 写在最后 题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排 ...
- 华为机试真题 Java 实现【统计射击比赛成绩】
目录 题目 思路 考点 Code 题目 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列.条件如下: 1.一个选手可 ...
- 【华为OD机试 2023 B卷 | 100分】 统计射击比赛成绩(C++ Java JavaScript )
在线OJ 已购买本专栏用户,请私信博主开通账号,在线刷题!!! 运行出现 Runtime Error 0Aborted,请忽略 华为OD统一考试A卷+B卷 新题库说明 2023年5月份,华为官方已经将 ...
- 【华为机试真题 Python】统计射击比赛成绩
目录 题目描述 输入描述 输出描述 参考示例 参考代码 机试介绍 写在最后
- C语言实训 实训项目一 统计歌唱比赛成绩
实训项目一 统计歌唱比赛成绩 有10名选手参加某歌唱比赛,每位选手演唱自己参赛曲目后,7名评委亮出自己的评分,后台人员会去掉最高分和最低分,将剩下的5个值求平均来计算该选手的比赛得分.比赛结束后,将根 ...
- C语言编程题—N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,
C语言编程题 设计程序,N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点.请编写函数fun,它的功能是:求出平均分,由函数值返回.例如,若学生的成绩是:85,76,69,85 ...
最新文章
- Google Objective-C Style Guide
- AAAI 2019 Oral | 让TA说你想听的—基于音/视频特征解离的讲述者人脸生成
- Spring5 源码下载注意事项
- jvm_垃圾收集算法讲解(二)
- vlan间访问控制的三种方法
- ffmpeg的编译大全
- Confluent官博:Kafka最牛队列,性能15倍于RabbitMQ!
- 编译原理 —— 1.1 什么是编译
- python 规则引擎 drools_Drools规则引擎入门demo
- 修改本地文件存储路径
- Meteor:快到飞起来的全栈JavaScript开发平台
- nodejs如何运行JavaScript代码
- Spring揭秘——读书笔记
- 利用EnableQ在线问卷调查引擎服务学校评教评学工作
- 短线交易秘诀(原书第2版)
- 摄影口诀--针对不同情景
- 从零开始之驱动发开、linux驱动(二十九、mmap原理)
- Spring Boot整合Shiro + JSP教程(用户认证,权限管理,图片验证码)
- 使用gitee托管代码
- 从零开始的OCR之旅
热门文章
- 时统ptp_IEEE1588对时系统,PTP校时模块,PTP时钟服务器
- Delphi控件安装方法
- css裁剪图片 clip-path
- abandon connection问题分析
- 使用jwt方式的接口访问
- Jib构建镜像问题从定位到深入分析
- 《死亡诗社》影评(作业)
- 『Python开发实战菜鸟教程』实战篇:一文带你了解人脸识别应用原理及手把手教学实现自己的人脸识别项目
- 计算机专业女生跨专业考研考什么好,计算机专业女生,考研,跨专业,考公务员。...
- 模电(八)放大电路静态工作点的稳定性