[2007年NOIP普及组] 奖学金
思路:定义结构体,用来存每个同学的个人信息。写一个函数使sort降序排列。
分析:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int c;//语文
int m;//数学
int e;//英语
int x;//编号1–n
};
node s[300];
bool comp(const struct node x,const struct node y)
{ //总分
if(x.c+x.m+x.e>y.c+y.m+y.e)//如果x的总分大于y
return 1;//返回true
if(x.c+x.m+x.e<y.c+y.m+y.e)//如果x的总分小于y
return 0;//返回false
//语文
if(x.c>y.c)
return 1;
if(x.c<y.c)
return 0;
//学号
if(x.x>y.x)
return 0;
if(x.x<y.x)
return 1;
}
int main()
{
int k;
cin>>k;
for(int i=1;i<=k;i++)
{
cin>>s[i].c;
cin>>s[i].m;
cin>>s[i].e;
s[i].x=i;
}
sort(s+1,s+1+k,comp);//降序
for(int i=1;i<=5;i++)//输出前5名
{
cout<<s[i].x<<” “;
cout<<s[i].c+s[i].m+s[i].e<<endl;
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280295.html