lmx120628 2023-07-20 19:32 采纳率: 60%
浏览 33
已结题

c++ 结构体与排序之奖学金

c++目描述
CZ中学每学期都会给学生提供丰厚的奖学金,但是要想获得这些奖学金也不是一件容易的事情。CZ中学对学生成绩的评定一共有A、B、C共3个等级,提供的奖学金有如下几种:
A等奖学金: 总分大于等于285分,且语数英三门课的成绩均在90分以上,奖金3000元 ;
B等奖学金: 总分大于等于280分,且语数英三门课的成绩均在88分以上,奖金2000元 ;
C等奖学金: 总分大于等于275分,且语数英三门课的成绩均在85分以上,奖金1000元 ;
所有未获得奖学金的一律设置为“M”等,且奖金设为0;
在CZ中学初三(2)班共有n个学生(姓名为汉字的全拼,并且无空格)(n<10),请根据他们的成绩按照总分的高低次序,如总分相同则按照语文成绩的高低进行输出获得奖学金同学的名字、等地及金额。

输入
5
xiaoming 95 90 62
xiaoli 88 96 98
xiaozhang 86 90 89
xiaozhu 90 90 90
xiaowang 98 95 96

输出
xiaowang A 3000
xiaoli B 2000

样例
输入 复制
5
xiaoming 95 90 62
xiaoli 88 96 98
xiaozhang 86 90 89
xiaozhu 90 90 90
xiaowang 98 95 96
输出 复制
xiaowang A 3000
xiaoli B 2000

  • 写回答

2条回答 默认 最新

  • 0x0007 2023-07-20 19:39
    关注
    #include <iostream>
    #include <string>
    using namespace std;
    
    struct Student {
        string name;
        int chinese;
        int math;
        int english;
        int total;
        string level;
        int scholarship;
    };
    
    void calculateScholarship(Student& student) {
        if (student.total >= 285 && student.chinese >= 90 && student.math >= 90 && student.english >= 90) {
            student.level = "A";
            student.scholarship = 3000;
        } else if (student.total >= 280 && student.chinese >= 88 && student.math >= 88 && student.english >= 88) {
            student.level = "B";
            student.scholarship = 2000;
        } else if (student.total >= 275 && student.chinese >= 85 && student.math >= 85 && student.english >= 85) {
            student.level = "C";
            student.scholarship = 1000;
        } else {
            student.level = "M";
            student.scholarship = 0;
        }
    }
    
    int main() {
        int n;
        cin >> n;
        Student students[n];
        for (int i = 0; i < n; i++) {
            cin >> students[i].name >> students[i].chinese >> students[i].math >> students[i].english;
            students[i].total = students[i].chinese + students[i].math + students[i].english;
            calculateScholarship(students[i]);
        }
        
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-1-i; j++) {
                if (students[j].total < students[j+1].total) {
                    swap(students[j], students[j+1]);
                } else if (students[j].total == students[j+1].total && students[j].chinese < students[j+1].chinese) {
                    swap(students[j], students[j+1]);
                }
            }
        }
        
        for (int i = 0; i < n; i++) {
            if (students[i].scholarship > 0) {
                cout << students[i].name << " " << students[i].level << " " << students[i].scholarship << endl;
            }
        }
        
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月28日
  • 已采纳回答 7月20日
  • 创建了问题 7月20日