问题描述:小王是班长。学期末到了,班级要评选三名三好学生,但是人数太多数据量大,非常麻烦,请您帮忙设计一个程序,输出同学们的排序,再输出三名三好学生的名单。
要求:排序前一行空出,按三门成绩总分排序,同分情况下按姓名顺序排序(按字典序逆序排序),输出学生姓名和总分;名单与排序间空一行,按样例输出:每个名字占一行,三好学生不超过三个人。另外,受到过处分的同学不能参与三好学生评比(只有处分栏为“no”的同学才能参与评比),但是一起排序。
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<cstdlib>
using namespace std;
struct stu
{
char name[255];
char xuehao[255];
int gaoshu;
int chengxu;
int yingyu;
char chufen[10];
int zongfen;
};
bool cmp(stu a,stu b)
{
if(a.zongfen!=b.zongfen)
return a.zongfen>b.zongfen;
if(_____(1)______)
return 1;
return 0;
}
int main()
{
int n,k=0;
char chufen[10]="no";
scanf("%d",&n);
stu*arr=(stu*)malloc(sizeof(stu)*n);
for(int i=0;i<n;i++)
{
scanf("%s%s%d%d%d%s",arr[i].name,arr[i].xuehao,&arr[i].gaoshu,&arr[i].chengxu,&arr[i].yingyu,&arr[i].chufen);
_____(2)______;
}
sort(arr,arr+n,cmp);
for(int i=0;i<n;i++)
{
printf("%s %d\n",arr[i].name,arr[i].zongfen);
}
printf("\n");
for(int i=0;_____(3)______;i++)
{
if(strcmp(arr[i].chufen,chufen)==0)
{
printf("%s %s\n",arr[i].name,arr[i].xuehao);
k++;
}
}
_____(4)_____;
arr=NULL;
return 0;
}