C++ 学生成绩排名系统

老师让淘淘统计班级同学的成绩和排名,他想这事老师经常要做,不如编写一个程序来完成这个任务。老师的要求如下:

输入

  • 第一行输入一个自然数 N(N<=50),表示有 N 位同学;
  • 第 2 到 N+1 行每行输入每个同学的语文、数学、英语成绩(整数)。

输出

  • 输出 N 行,每行包含一个同学的三门成绩及总分,排名(每项之间用一个空格分隔)。

样例组

样例 1:输入

4
90 98 95
90 95 98
88 99 90
89 99 96

样例 1:输出

90 98 95 283 2
90 95 98 283 2
88 99 90 277 4
89 99 96 284 1

要求:

  • 时间限制:1.0Sec
  • 内存限制:128MB

C++ 代码

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Student {
    int score1;
    int score2;
    int score3;
    int totalScore;
    int rank;
};

bool compare(const Student& s1, const Student& s2) {
    if (s1.totalScore == s2.totalScore) {
        return s1.score1 > s2.score1;
    }
    return s1.totalScore > s2.totalScore;
}

int main() {
    int N;
    cin >> N;
    vector<Student> students(N);
    for (int i = 0; i < N; i++) {
        cin >> students[i].score1 >> students[i].score2 >> students[i].score3;
        students[i].totalScore = students[i].score1 + students[i].score2 + students[i].score3;
        students[i].rank = 1;
    }
    sort(students.begin(), students.end(), compare);
    for (int i = 0; i < N; i++) {
        if (i > 0 && students[i].totalScore == students[i-1].totalScore) {
            students[i].rank = students[i-1].rank;
        } else {
            students[i].rank = i + 1;
        }
        cout << students[i].score1 << " " << students[i].score2 << " " << students[i].score3 << " " << students[i].totalScore << " " << students[i].rank << endl;
    }
    return 0;
}

原文地址: https://www.cveoy.top/t/topic/p5n4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录