Peguin Princess 2024-02-19 09:55 采纳率: 0%
浏览 6

sort 函数进行成绩排序

小明的学校在统计所有同学的排名,每位同学都有自己的学号、语文成绩和数学成绩,学号从1开始依次递增,每人的学号各不相同。学校决定按照总分排名,总分越高,排名越靠前,如果总分相同,则再比较学号,学号越小排名越靠前。在排序完成之后,学校发现成绩录入有错误存在,有些同学存在相同的多条记录(也就是说数据中存在重复的学号,但实际每人的学号均不一样,而数据中重复的学号对应的成绩也是完全一样的),因此需要再进行去重处理。

给若干条学生的成绩记录,每条记录包括该生的学号以及语文成绩、数学成绩,请按照规则对所有学生进行排序与去重,最后输出所有学生的记录。
输入
有若干行,每行1条学生记录,一共3个数,依次为学生的学号、语文成绩、数学成绩

不超过10000条记录(包括重复记录),数据保证重复学号对应的记录完全一致。
输出
经过排序和去重之后的所有学生记录,每行1个学生的记录,依次是学号、语文成绩、数学成绩,使用1个空格分隔。输入输出样例
样例 1
输入
1 98 98
1 98 98
2 87 100
3 95 99
4 75 95
输出
1 98 98
3 95 99
2 87 100
4 75 95

  • 写回答

4条回答 默认 最新

  • &春风有信 2024-02-19 10:01
    关注
    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    struct Student {
        int id;
        int chinese_score;
        int math_score;
    
        // 用于排序的比较函数
        bool operator<(const Student& other) const {
            if (chinese_score + math_score != other.chinese_score + other.math_score) {
                // 先按总分排序
                return chinese_score + math_score > other.chinese_score + other.math_score;
            } else {
                // 总分相同时,按学号排序
                return id < other.id;
            }
        }
    };
    
    int main() {
        std::vector<Student> students;
        int id, chinese, math;
    
        // 读取输入直到文件结束
        while (std::cin >> id >> chinese >> math) {
            students.push_back({id, chinese, math});
        }
    
        // 对学生记录进行排序
        std::sort(students.begin(), students.end());
    
        // 去除重复的学生记录
        auto unique_end = std::unique(students.begin(), students.end(),
            [](const Student& a, const Student& b) {
                return a.id == b.id && a.chinese_score == b.chinese_score && a.math_score == b.math_score;
            }
        );
    
        // 调整vector的大小以移除重复项
        students.erase(unique_end, students.end());
    
        // 输出排序和去重后的学生记录
        for (const auto& student : students) {
            std::cout << student.id << " " << student.chinese_score << " " << student.math_score << std::endl;
        }
    
        return 0;
    }
    

    在上面的代码中,我们定义了一个Student结构体来存储每个学生的信息,包括学号、语文成绩和数学成绩。结构体还重载了<运算符,用于定义排序规则。我们读取输入,将每个学生的信息存储在一个vector中,然后使用std::sort进行排序。排序完成后,我们使用std::unique去除重复的学生记录,并输出最终的结果。

    请注意,为了简化代码,我们假设输入总是有效的,并且没有错误处理。在实际应用中,你可能需要添加额外的错误检查和处理逻辑。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月19日

悬赏问题

  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画