比赛成绩处理算法:去除极端分求平均

需积分: 20 2 下载量 62 浏览量 更新于2024-09-14 收藏 139KB DOC 举报
"该资源是一份关于参赛结果分数处理的课程设计报告,主要涉及如何根据特定规则计算参赛选手的最后得分。参赛选手人数n大于1,评委人数m大于2,每个选手由评委给出多个评分,评分范围是0到10的正实数。最后得分的计算方法基于评委数量,当m小于9时,去除一个最高分和一个最低分后取平均值;当m等于或大于9时,去除两个最高分和两个最低分后取平均值。报告还提及需要从名为f1.txt的数据文件中读取选手信息,并将处理后的结果输出到屏幕和f2.txt文件中。" 在编程实现这个任务时,我们需要考虑以下几个关键知识点: 1. 数据结构与文件操作:首先,需要设计一个数据结构来存储每个选手的信息,包括编号、姓名和评委给出的所有分数。这可以通过创建一个类或者使用字典来实现。然后,我们需要从文本文件f1.txt中读取数据,这通常通过文件I/O函数完成,如Python中的`open()`和`readline()`。 2. 数据处理:读取到数据后,需要对每个选手的分数进行处理,这涉及到遍历分数列表,找到最高分和最低分,并根据评委人数m选择性地去除这些极端值。这里可以使用排序算法如快速排序或内置的`max()`和`min()`函数来找到最高分和最低分。 3. 平均值计算:去除极端值后,计算剩余分数的平均值,这可以通过求和并除以有效分数的数量来实现。注意,平均值计算时要考虑到m的大小,以确定去除的分数个数。 4. 结果输出:最后,将计算出的最后得分和其他相关信息(参赛号、姓名、最高分、最低分)按照指定格式输出到屏幕和f2.txt文件中。这可能需要用到`print()`函数以及文件写入操作,例如Python的`write()`。 5. 扩展功能:报告中提到可以考虑找出比赛的前k名,这需要对所有选手的最后得分进行排序,可以使用各种排序算法(如冒泡排序、快速排序等),然后返回前k个元素。 6. 错误处理:在实际编程中,还需要考虑文件不存在、读写错误等情况,需要添加适当的异常处理机制,确保程序的健壮性。 这个课程设计涵盖了数据处理、文件操作、数据结构、算法应用等多个重要的计算机科学概念,是一个很好的实践项目,可以帮助学生巩固和提升编程技能。
2010-11-29 上传
三 11. 对参赛结果分数进行处理:参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score(分数score为小于等于10的一个正实数)。选手的最后得分lastScore计算方法为 (1)m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。 (2)m≥9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。 假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。 请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。 假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为: 1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2 2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3 3 guojian 8.9 8.4 8.7 8.6 8.6 8.4 8.6 4 maling 7.9 8.3 8.5 8.6 8.5 8.9 8.3 5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9 那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为: ---------------------------------------------------------- 参赛号 姓 名 最高分 最低分 累积分 最后得分 ---------------------------------------------------------- 1 zhangjin 9.7 7.9 44.9 8.98 2 lintao 9.3 8.2 43.9 8.78 3 guojian 8.9 8.4 42.9 8.58 4 maling 8.9 7.9 42.2 8.44 5 liuyifan 9.8 8.9 46.3 9.26 ---------------------------------------------------------- 思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。