感觉自己写的很复杂,很基础,很好懂。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct StuNode *Students;
struct StuNode{
char ID[6];
int C;
int M;
int E;
int A;
};
int Best(int a,int b,int c,int d);
int main()
{
int i,j,N,M;
scanf("%d %d\n",&N,&M);
Students StudentsList=(Students)malloc(N*sizeof(struct StuNode));
int C_Rank[N],M_Rank[N],E_Rank[N],A_Rank[N],BestRank;
char StuID[6];
for(i=0;i<N;i++)
{
scanf("%s %d %d %d",&StudentsList[i].ID,&StudentsList[i].C,&StudentsList[i].M,&StudentsList[i].E);
StudentsList[i].A=StudentsList[i].C + StudentsList[i].M + StudentsList[i].E;
}
for(i=0;i<N;i++)
{
A_Rank[i]=1;
for(j=0;j<N;j++)
{
if(StudentsList[j].A>StudentsList[i].A)
A_Rank[i]++;
}
}
for(i=0;i<N;i++)
{
C_Rank[i]=1;
for(j=0;j<N;j++)
{
if(StudentsList[j].C >StudentsList[i].C )
C_Rank[i]++;
}
}
for(i=0;i<N;i++)
{
M_Rank[i]=1;
for(j=0;j<N;j++)
{
if(StudentsList[j].M >StudentsList[i].M)
M_Rank[i]++;
}
}
for(i=0;i<N;i++)
{
E_Rank[i]=1;
for(j=0;j<N;j++)
{
if(StudentsList[j].E>StudentsList[i].E)
E_Rank[i]++;
}
}
for(i=0;i<M;i++)
{
scanf("%s",StuID);
for(j=0;j<N;j++)
{
if(strcmp(StuID,StudentsList[j].ID)==0)
{
BestRank=Best(A_Rank[j],C_Rank[j],M_Rank[j],E_Rank[j]);
printf("%d ",BestRank);
if(A_Rank[j]==BestRank)
printf("A\n");
else if(C_Rank[j]==BestRank)
printf("C\n");
else if(M_Rank[j]==BestRank)
printf("M\n");
else
printf("E\n");
break;
}
}
if(j==N)
{
printf("N/A\n");
}
}
return 0;
}
int Best(int a,int b,int c,int d)
{
return a<b? a<c ? a<d?a:d :c<d?c:d : b<c ? b<d?b:d :c<d?c:d;
}