If a student is not on the grading list, simply output "N/A".
IDEA
1.需要注意的是,分数相同其排名也相同
#include<iostream> #include<cstring> #include<vector> #include<algorithm> using namespace std; struct Stu{ string id; int c,m,e; int a; int rank; }; int cmp_c(Stu stu1,Stu stu2){ return stu1.c>stu2.c; } int cmp_m(Stu stu1,Stu stu2){ return stu1.m>stu2.m; } int cmp_e(Stu stu1,Stu stu2){ return stu1.e>stu2.e; } int cmp_a(Stu stu1,Stu stu2){ return stu1.a>stu2.a; } int main(){ int n,m; cin>>n>>m; Stu stu[2001]; for(int i=0;i<n;i++){ cin>>stu[i].id>>stu[i].c>>stu[i].m>>stu[i].e; stu[i].a=stu[i].c+stu[i].m+stu[i].e; stu[i].rank=99999; } for(int i=0;i<m;i++){ string id; cin>>id; int flag=0; for(int i=0;i<n;i++){ if(stu[i].id==id){ flag=1; } } if(flag==0){ cout<<"N/A"<<endl; continue; } int rank[4]={0}; //对a排序 sort(stu,stu+n,cmp_a); for(int i=0;i<n;i++){ if(i==0){ stu[i].rank=1; }else if(stu[i].a==stu[i-1].a){ stu[i].rank=stu[i-1].rank; }else{ stu[i].rank=i+1; } } for(int i=0;i<n;i++){ if(stu[i].id==id){ rank[0]=stu[i].rank; break; } } //对c排序 sort(stu,stu+n,cmp_c); for(int i=0;i<n;i++){ if(i==0){ stu[i].rank=1; }else if(stu[i].c==stu[i-1].c){ stu[i].rank=stu[i-1].rank; }else{ stu[i].rank=i+1; } } for(int i=0;i<n;i++){ if(stu[i].id==id){ rank[1]=stu[i].rank; break; } } //对m排序 sort(stu,stu+n,cmp_m); for(int i=0;i<n;i++){ if(i==0){ stu[i].rank=1; }else if(stu[i].m==stu[i-1].m){ stu[i].rank=stu[i-1].rank; }else{ stu[i].rank=i+1; } } for(int i=0;i<n;i++){ if(stu[i].id==id){ rank[2]=stu[i].rank; break; } } //对e排序 sort(stu,stu+n,cmp_e); for(int i=0;i<n;i++){ if(i==0){ stu[i].rank=1; }else if(stu[i].e==stu[i-1].e){ stu[i].rank=stu[i-1].rank; }else{ stu[i].rank=i+1; } } for(int i=0;i<n;i++){ if(stu[i].id==id){ rank[3]=stu[i].rank; break; } } int min=2001,index=0; for(int i=0;i<4;i++){ // cout<<rank[i]<<" "; if(min>rank[i]){ min=rank[i]; index=i; } } //cout<<endl; cout<<min; switch(index){ case 0:cout<<" "<<"A";break; case 1:cout<<" "<<"C";break; case 2:cout<<" "<<"M";break; case 3:cout<<" "<<"E";break; } cout<<endl; } return 0; }