c++题目求大佬

2025-05-18 05:59:23
推荐回答(1个)
回答1:

这一题类似于2007年普及组的一题:奖学金。

是这样的:

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。

这种类型的题目可以使用结构体来方便我们的排序。

因为我们都是学编程的,所以我们都需要思考(我的老师说的)不能直接抄代码,所以我不会直接上代码。所以我就先送上一份“奖学金”的代码来给一点启发。(当然如果一定需求这道题的AC代码的话也可以私聊我。(不推荐))

#include 
using namespace std;
struct stu
{
    int num,c,m,e,sum;
};
bool cmp(stu a,stu b)
{
    if(a.sum>b.sum) return 1;
    else if(a.sum    else
    {
        if(a.c>b.c) return 1;
        else if(a.c        else
        {
            if(a.num>b.num) return 0;
            else return 1;
        }
    }
}
int main()
{
    int n;
    cin>>n;
    stu student[n+1];
    for(int i=1;i<=n;i++)
    {
        student[i].num=i;
        cin>>student[i].c>>student[i].m>>student[i].e;
        student[i].sum=student[i].c+student[i].m+student[i].e;
    }
    sort(student+1,student+1+n,cmp);
    for(int i=1;i<=5;i++)
        cout<    return 0;
}

这道题跟你的题真的特别相似,所以可以举一反三,建议自己想想看。(当然如果一定需求这道题的AC代码的话也可以私聊我。(不推荐))