PTA 1080 MOOC期终成绩 (25 分)

简介: 对于在中国大学MOOC(www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。

题目


对于在中国大学MOOC(www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分(满分100)。总评成绩的计算公式为 G=(G mid−term ×40%+G final ×60%),如果 G mid−term

G final ;否则总评 G 就是 G final 。这里 G mid−term 和 G final 分别为学生的期中和期末成绩。

现在的问题是,每次考试都产生一张独立的成绩单。本题就请你编写程序,把不同的成绩单合为一张。

输入格式: 输入在第一行给出3个整数,分别是 P(做了在线编程作业的学生数)、M(参加了期中考试的学生数)、N(参加了期末考试的学生数)。每个数都不超过10000。

接下来有三块输入。第一块包含 P 个在线编程成绩 G p ;第二块包含 M 个期中考试成绩 G mid−term ;第三块包含 N 个期末考试成绩 G final 。每个成绩占一行,格式为:学生学号 分数。其中学生学号为不超过20个字符的英文字母和数字;分数是非负整数(编程总分最高为900分,期中和期末的最高分为100分)。

输出格式: 打印出获得合格证书的学生名单。每个学生占一行,格式为:

学生学号 G p G mid−term G final G

如果有的成绩不存在(例如某人没参加期中考试),则在相应的位置输出“−1”。输出顺序为按照总评分数(四舍五入精确到整数)递减。若有并列,则按学号递增。题目保证学号没有重复,且至少存在1个合格的学生。


输入样例:
6 6 7
01234 880
a1903 199
ydjh2 200
wehu8 300
dx86w 220
missing 400
ydhfu77 99
wehu8 55
ydjh2 98
dx86w 88
a1903 86
01234 39
ydhfu77 88
a1903 66
01234 58
wehu8 84
ydjh2 82
missing 99
dx86w 81
结尾无空行
输出样例:
missing 400 -1 99 99
ydjh2 200 98 82 88
dx86w 220 88 81 84
wehu8 300 55 84 84
结尾无空行

解题思路


# ## 该写法超时
# inputList = input().split(" ")
# PCount = int(inputList[0])
# MCount = int(inputList[1])
# FCount = int(inputList[2])
# # PCount = 6
# # MCount = 6
# # FCount = 7
# PDict = dict()
# MDict = dict()
# FDict = dict()
# for i in range(PCount):
#     inputList = input().split(" ")
#     # inputList = "a1903 199".split(" ")
#     PDict[inputList[0]] = int(inputList[1])
# for i in range(MCount):
#     inputList = input().split(" ")
#     # inputList = "a1902 100".split(" ")
#     MDict[inputList[0]] = int(inputList[1])
# for i in range(FCount):
#     inputList = input().split(" ")
#     # inputList = "a1901 99".split(" ")
#     FDict[inputList[0]] = int(inputList[1])
# resArr = []
# nameDic = dict()#用于登记哪些学生已经存档
# for key,value in PDict.items():
#     stdDic = dict()
#     stdDic["name"] = key
#     stdDic["Gp"] = value
#     stdDic["Gm"] = -1
#     stdDic["Gf"] = -1
#     resArr.append(stdDic)
#     nameDic[key] = 1
# for key,value in MDict.items():
#     if key in nameDic:
#         # 遍历并添加Gm成绩
#         for eachDic in resArr:
#             if eachDic["name"] == key:
#                 eachDic["Gm"] = value
#                 break
#     else:
#     # 如果不存在就添加新字典
#         stdDic = dict()
#         stdDic["name"] = key
#         stdDic["Gp"] = -1
#         stdDic["Gm"] = value
#         stdDic["Gf"] = -1
#         resArr.append(stdDic)
#         nameDic[key] = 1
# for key,value in FDict.items():
#     # 遍历并添加Gf成绩
#     if key in nameDic:
#         for eachDic in resArr:
#             if eachDic["name"] == key:
#                 eachDic["Gf"] = value
#                 break
#     else:
#     # 如果不存在就添加新字典
#         stdDic = dict()
#         stdDic["name"] = key
#         stdDic["Gp"] = -1
#         stdDic["Gm"] = -1
#         stdDic["Gf"] = value
#         resArr.append(stdDic)
#         nameDic[key] = 1
# # 得到完整字典列表后,进行总成绩计算
# for dic in resArr:
#     if int(dic["Gm"])>int(dic["Gf"]) and dic["Gm"] != -1 and dic["Gf"] != -1:
#         tolScore = int(dic["Gm"])*4+ int(dic["Gf"])*6
#         # 四舍五入
#         if tolScore%10 >6:
#             tolScore = tolScore + 10
#         dic["G"] = tolScore//10
#     else:
#         dic["G"] = int(dic["Gf"])
# # print(resArr)
# # print(sorted(resArr, key = lambda i:(i["G"],i["name"]), reverse=True))
# # 先按姓名排序 再按成绩倒序
# resArr = sorted(resArr, key = lambda i:(i["name"]))
# resArr = sorted(resArr, key = lambda i:(i["G"]), reverse=True)
# for dic in resArr:
#         if int(dic["Gp"])>=200 and int(dic["G"])>=60:
#             print(dic["name"] + " " + str(dic["Gp"]) + " " + str(dic["Gm"]) + " " + str(dic["Gf"]) + " " + str(dic["G"]))
## 这是不超时的
# 四个字典用来保存成绩
Gp ={}
Gmidterm={}
Gfinal={}
G={}
n,m,k=map(int,input().split())
# 三个for 循环用来读入数据
for i in range(n):
    x,y=input().split()
    if int(y)>=200:
        Gp[x]=int(y)
for i in range(m):
    x,y=input().split()
    if x in Gp.keys():
        Gmidterm[x]=int(y)
for i in range(k):
    x,y=input().split()
    if x in Gp.keys():
        Gfinal[x]=int(y)
# 对>=200分的同学进行算最终成绩
for t in Gp:
    if t not in Gmidterm.keys():
        Gmidterm[t]=-1
    if t not in Gfinal.keys():
        Gfinal[t]=-1
    if Gmidterm[t]>Gfinal[t]:
        G[t]=int(Gmidterm[t]*0.4+Gfinal[t]*0.6+0.5)
    else:
        G[t]=Gfinal[t]
# 主要代码 : 对字典的键和值同时进行排序
G=sorted(G.items(), key=lambda item:(-item[1],item[0]) , reverse=False)
for t in G:
    if int(t[1])>=60:
        id=t[0]
        print(t[0],Gp[id],Gmidterm[id],Gfinal[id],t[1])


目录
相关文章
CCF推荐A类会议和期刊总结:计算机体系结构/并行与分布计算/存储系统领域
中国计算机学会(CCF)2022年版推荐目录涵盖了计算机体系结构、并行与分布计算、存储系统领域的多个A类会议和期刊。本文汇总了这些顶级资源的全称、出版社、dblp网址及领域。包括《ACM计算机系统汇刊》、《ACM存储汇刊》等期刊,以及ACM PPoPP、USENIX FAST等会议,为研究人员提供了重要学术参考。
13319 64
CCF推荐A类会议和期刊总结:计算机体系结构/并行与分布计算/存储系统领域
|
监控 安全 测试技术
API 管理的概念是什么?Apifox 为什么值得推荐?
在互联世界中,API如同软件间的“翻译官”,让应用能相互交流、共享数据。随着API数量激增,有效管理变得至关重要。API管理确保API的质量、安全与性能,提升开发效率及用户体验。它覆盖API从设计到废弃的全过程。利用如Apifox这样的工具,可以轻松实现API的设计、测试、文档管理和模拟等。Apifox集多种功能于一体,简化工作流程,提高团队协作效率。在选择API管理工具时,Apifox以全面的功能和友好的使用体验脱颖而出,成为开发者们的优选。随着技术发展,未来API管理将更加智能化和高效。
450 126
API 管理的概念是什么?Apifox 为什么值得推荐?
|
7月前
|
机器学习/深度学习 算法 数据挖掘
PyTabKit:比sklearn更强大的表格数据机器学习框架
PyTabKit是一个专为表格数据设计的新兴机器学习框架,集成了RealMLP等先进深度学习技术与优化的GBDT超参数配置。相比传统Scikit-Learn,PyTabKit通过元级调优的默认参数设置,在无需复杂超参调整的情况下,显著提升中大型数据集的性能表现。其简化API设计、高效训练速度和多模型集成能力,使其成为企业决策与竞赛建模的理想工具。
236 12
PyTabKit:比sklearn更强大的表格数据机器学习框架
|
8月前
|
JSON 监控 API
1688商品列表API接口指南
1688 商品列表 API 可帮助开发者和商家获取商品基本信息(如 ID、名称、价格等)、支持筛选排序(类目、价格、销量等条件)、分页查询及指定店铺商品获取,便于商品管理与竞品分析。调用流程包括:注册账号创建应用以获取 App Key 和 App Secret、生成签名确保请求合法性、构造请求参数(含 app_key、sign 等)、发送 HTTP 请求并处理 JSON 响应数据。
334 19
|
前端开发
postcss-px-to-viewport
【8月更文挑战第10天】
164 3
基于双闭环PI的SVPWM控制器simulink建模与仿真
本课题基于双闭环PI的SVPWM控制器,在MATLAB2022a中构建Simulink模型,涵盖DA转换、abc-dq变换、Clark变换、PI控制器及SVPWM模块。该控制器利用SVPWM技术提高电压利用率并减少谐波,通过双闭环PI算法精准控制电机转速与电流。仿真结果显示该系统具有优异的控制性能。
pdf文件转化为png照片 (PyMuPDF下面的fitz)
pdf文件转化为png照片 (PyMuPDF下面的fitz)
|
SQL 关系型数据库 MySQL
深入探索MySQL索引策略
本文旨在深入探讨MySQL(8.0.26)数据库中索引的设计与优化方法。
|
存储 安全 Java
settings.xml详解(很详细读这一篇就够了)
settings.xml是Java项目中用于配置Maven的重要文件,它详细规定了Maven的运行规则和行为。该文件通常位于用户家目录下的.m2文件夹中,或者项目根目录下的.mvn文件夹内。settings.xml中包含了众多配置项,从代理设置、镜像仓库配置,到服务器认证信息、插件组等,均可以在此文件中进行细致定义。通过合理配置settings.xml,我们可以优化Maven的依赖下载速度,保障仓库访问的安全性,甚至实现私有仓库的搭建与管理。深入了解settings.xml的每一项配置,对于提高Maven使用效率、保障项目构建稳定性具有重要意义。因此,无论是Maven初学者还是资深用户,都应仔
15113 4
|
JavaScript 前端开发 存储
JavaScript高级笔记-coderwhy版本(四)
JavaScript高级笔记-coderwhy版本
209 0