本次实验为:PAT考试排名汇总
1.问题定义
1【题目描述】PTA(数据结构与算法题目集7-41) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及 自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才, 为企业选拔人才提供参考标准。每次考试会在若干个不同的考点同时举行,每个考点用局域网,产 生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。现在就请你写一个 程序自动归并各个考点的成绩并生成总排名表。 2 【输入格式】 输入的第一行给出一个正整数N(≤100),代表考点总数。随后给出N个考点的成绩,格式为:首 先一行给出正整数K(≤300),代表该考点的考生总数;随后K行,每行给出1个考生的信息,包 括考号(由13位整数字组成)和得分(为[0,100]区间内的整数),中间用空格分隔。 3 【输出格式】 首先在第一行里输出考生总数。随后输出汇总的排名表,每个考生的信息占一行,顺序为:考号、 最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须 按最终排名的非递减顺序输出,获得相同分数的考生应有相同名次,并按考号的递增顺序输出。
2.算法分析
根据题目要求,显然这个问题与通讯录管理系统和图书管理系统的设计都有相似之处。只不过这个问题相对来说更加的简单。因为这里相当于只用实现添加考生这一功能,然后再通过比较排序来达到相关目的。
1.首先根据输入的考点数量 N
,依次读取每个考点的考生数量 K
以及每个考生的考号和成绩信息,并将这些信息存储到向量中
2.排序操作:
对所有存储好的考生信息按照成绩从高到低进行排序,如果成绩相同,则按照考号从小到大排序。通过自定义比较函数 compare
传递给 sort
函数来完成排序。
3.排名确定与输出:
1.遍历排序后的考生信息,确定最终排名。如果当前考生的成绩和前一个考生成绩不同,则当前考生的排名为当前遍历的序号加 1(因为序号从 0 开始,排名从 1 开始)。
2.接着对于每个考生,确定其在所属考点内的排名,通过筛选出该考点的所有考生信息,再按照类似确定最终排名的方式确定其在考点内的排名。
3.最后按照要求的格式输出考生的考号、最终排名、考点编号、在该考点的排名等信息。
3.概要设计
int main() {
int n;
cin >> n;
vector<Student> students;
// 读取各个考点考生信息
for (int i = 0; i < n; ++i) {
int k;
cin >> k;
for (int j = 0; j < k; ++j) {
Student s;
cin >> s.num >> s.score;
s.site = i + 1;
students.push_back(s);
}