当前位置: 首页 > article >正文

每日一题之成绩排序(进阶版)

某校进行了一场月考,考试试卷上只有三种题型:选择题、填空题、应用题,每种题型的满分都是一百分。
考试结束后,老师想知道各题型最高分的学生学号,以及总分前三名同学的成绩和学生学号。
若总分相同则按照应用题、填空题、选择题优先级递减的方式排序,如果仍相同,按学号从小到大排序。 
输入: 第一行,一个整数n,表示参加考试的学生的数量。3<=N<=500。 
接下来n行,每行第一个为学生学号(8位数字),后面跟着三个用空格隔开的整数,分别表示该学生三种题型的得分情况,每个整数都是0到100之间。 
输出: 分三行分别输出选择题、填空题、应用题得分最高的学生学号,又分三行输出总分前三名同学的成绩和学生学号
输入样例:
5
1 88 76 80
2 72 85 91
3 77 88 83
4 84 83 89
5 78 90 84
输出样例:
选择题最高分的学生学号: 1
填空题最高分的学生学号: 5
应用题最高分的学生学号: 2
总分前三名学生的学号和成绩:
学号: 4, 总分: 256
学号: 5, 总分: 252
学号: 2, 总分: 248

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
    int id;           // 学号
    int choiceScore;  // 选择题得分
    int fillScore;    // 填空题得分
    int appScore;     // 应用题得分
    int totalScore;   // 总分
};

// 自定义比较函数用于排序
bool compareStudents(const Student &a, const Student &b) {
    if (a.totalScore != b.totalScore) 
        return a.totalScore > b.totalScore;
    else if (a.appScore != b.appScore) 
        return a.appScore > b.appScore;
    else if (a.fillScore != b.fillScore) 
        return a.fillScore > b.fillScore;
    else if (a.choiceScore != b.choiceScore) 
        return a.choiceScore > b.choiceScore;
    else 
        return a.id < b.id;
}

int main() {
    int N;
    cout << "请输入学生人数: ";
    cin >> N;

    vector<Student> students(N);
    int maxChoiceScore = -1, maxFillScore = -1, maxAppScore = -1;
    int maxChoiceId = -1, maxFillId = -1, maxAppId = -1;

    for (int i = 0; i < N; ++i) {
        cout << "请输入第" << i + 1 << "个学生的学号、选择题得分、填空题得分和应用题得分: ";
        cin >> students[i].id >> students[i].choiceScore >> students[i].fillScore >> students[i].appScore;

        students[i].totalScore = students[i].choiceScore + students[i].fillScore + students[i].appScore;

        // 更新每种题型的最高分和对应学号
        if (students[i].choiceScore > maxChoiceScore) {
            maxChoiceScore = students[i].choiceScore;
            maxChoiceId = students[i].id;
        }
        if (students[i].fillScore > maxFillScore) {
            maxFillScore = students[i].fillScore;
            maxFillId = students[i].id;
        }
        if (students[i].appScore > maxAppScore) {
            maxAppScore = students[i].appScore;
            maxAppId = students[i].id;
        }
    }

    // 按总分排序
    sort(students.begin(), students.end(), compareStudents);

    // 输出每种题型的最高分学生学号
    cout << "选择题最高分的学生学号: " << maxChoiceId << std::endl;
    cout << "填空题最高分的学生学号: " << maxFillId << std::endl;
    cout << "应用题最高分的学生学号: " << maxAppId << std::endl;

    // 输出总分前三名学生学号和成绩
    cout << "总分前三名学生的学号和成绩:" << std::endl;
    for (int i = 0; i < std::min(3, N); ++i) {
        std::cout << "学号: " << students[i].id << ", 总分: " << students[i].totalScore << std::endl;
    }

    return 0;
}

成绩排序的规则可以多种多样,最后就是返回一个布尔值


http://www.kler.cn/a/388179.html

相关文章:

  • go reflect 反射
  • ROM修改进阶教程------安卓14 安卓15去除app签名验证的几种操作步骤 详细图文解析
  • uniapp vue里按钮上的文字,换行的方法,用rich-text
  • 【LLM Agents体验 3】利用Open-WebUI+Ollama本地部署Qwen2.5:7B大模型的安装指南
  • 【Linux】常用命令(2.6万字汇总)
  • 飞凌嵌入式FET527N-C核心板现已适配Android 13
  • springboot静态资源映射不生效问题
  • Node.js——fs模块-相对路径的bug与解决
  • 机器学习—多类
  • C++使用开源ConcurrentQueue库处理自定义业务数据类
  • MySQL的其他函数
  • Oracle简介、环境搭建和基础DML语句
  • 网络安全从入门到精通(特别篇IIl):应急响应之病毒蠕虫处置流程
  • 深度学习-张量相关
  • 解决 IntelliJ IDEA Maven 项目 JDK 版本自动变为 1.5 的问题
  • 硬件设备网络安全问题与潜在漏洞分析及渗透测试应用
  • 开源竞争-利用kimi编程助手搭建小程序(11)
  • 解决编译 fast-lio-lc 算法时遇到的error方法
  • uniapp uni-calendar日历实现考勤统计功能
  • 大数据机器学习算法与计算机视觉应用04:多项式
  • macOS开发环境配置与应用开发(详细讲解)
  • 蔚来Android面试题及参考答案(3万字长文)
  • Python小白学习教程从入门到入坑------第二十九课 访问模式(语法进阶)
  • .NET WPF CommunityToolkit.Mvvm框架
  • Vue数据响应式原理
  • Cent OS-7的Apache服务配置