Ginger_Code 2023-02-06 16:29 采纳率: 75%
浏览 41
已结题

c++问题:考试排序问题

我思考了很久也没有想出好答案,您们能想出来吗,十分感谢!
题目
某班级进行了一次考试,本次考试考了语文,数学两科成绩,班主任想让小明根据本次班级考试的学生的分数情况,进行一个排名,先按照总分进行排名,总分高的排名在最前面,总分一样时,按照语文成绩从高到低进行排名,如果语文成绩一样,则按照学号小的排到前面。班主任想要获得班级里前五名的情况,请你用c++语言回答。(说明:编号以输入时的次序作为该学生的编号)
输入描述
总共n+1行
第一行一个整数n,表示班级总人数n
接下来有n行,每行有4个数据,第一个数据表示姓名,第二个数据表示语文成绩,第三个表示数学成绩
输出描述
总共输出5行,为前5名学生的情况
每行有3个数据,该学生的编号,姓名,总分,每个数据之间使用一个空格
样例
输入

6
xiaomin 80 96
aji 98 63
wangmin 55 90
duoduo 99 89
zhang 100 100
min 98 63
输出
5 zhang 200
4 duoduo 188
1 xiaomin 176
2 aji 161
6 min 161
我写的是

#include<iostream>
using namespace std;
int main() {
      int a;
        cin >> a;
        for (a;a<100;a++)
        {
        
        }
      return 0;
}

然后就不会了,您们能帮我写一下吗,谢谢!

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-02-06 22:14
    关注

    供参考:

    #include<iostream>
    using namespace std;
    struct student{
        int  id;
        char name[16];
        int  language,math;
        int  sum;
    }stu[50];
    void swap(struct student *a, struct student *b)
    {
        struct student t;
        t = *a; *a = *b; *b = t;
    }
    int main() {
        int n, i, j;
        cin >> n;
        for (i = 0;i < n; i++)
        {
            stu[i].id = i+1;
            cin >> stu[i].name >> stu[i].language >> stu[i].math;
            stu[i].sum = stu[i].language + stu[i].math;
        }
        for (i = n - 1; i > 0; i--)
        {
            for (j = 0; j < i; j++)
            {
                if (stu[j].sum < stu[j+1].sum ||
                    stu[j].sum == stu[j+1].sum && stu[j].language < stu[j+1].language ||
                    stu[j].language == stu[j+1].language && stu[i].id > stu[j+1].id)
                    swap(&stu[j], &stu[j+1]);
            }
        }
        for (i = 0; i < 5; i++)
            cout << stu[i].id << " " << stu[i].name << " " << stu[i].sum << endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月6日