25分题中比较简单的排序题
只需要注意一下细节,就是在没有男生或没有女生的情况下需要分别在第一行和第二行输出Absent。其中有一个样例输入人数是0,这时候需要输出两行Absent
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct stu
{
string name;
string gender;
string id;
int grade;
}v[105];
bool cmp(stu a,stu b) //性别不同则女的排在前,性别相同则分数高的排在前
{
if(a.gender!=b.gender)return(a.gender<b.gender);
else return(a.grade>b.grade);
}
int main()
{
int f=0,m=0,n,i,j,k,x;
string a,b,c;
scanf("%d",&n);
for(i=0;i<n;i++)
{
cin>>v[i].name>>v[i].gender>>v[i].id>>v[i].grade;
if(v[i].gender=="M")m++; //统计男
else f++; //统计女
}
sort(v,v+n,cmp); //排序
if(m*f==0) //没有男生或没有女生的情况
{
if(m==0&&f==0)cout<<"Absent"<<endl<<"Absent"<<endl;
else if(f==0&&m!=0)cout<<"Absent"<<endl<<v[n-1].name<<' '<<v[n-1].id<<endl;
else cout<<v[0].name<<' '<<v[0].id<<endl<<"Absent"<<endl;
printf("NA");
return 0;
}
else
{
cout<<v[0].name<<' '<<v[0].id<<endl;
cout<<v[n-1].name<<' '<<v[n-1].id<<endl;
printf("%d",v[0].grade-v[n-1].grade);
}
return 0;
}