是这样的:
某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前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.sumelse
{
if(a.c>b.c) return 1;
else if(a.celse
{
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代码的话也可以私聊我。(不推荐))