PAT1012

来源:互联网 发布:开处方软件 编辑:程序博客网 时间:2024/04/30 03:09

注意点:如果两个人的成绩相同,则排名并列


//pseudocode//对单个课程排序sort_course  for i =0 to N   temp = S[i];      while(temp.math.soccer>S[j].math.soccer)        exchange S[i] and S[j];



#include<stdio.h>#include<string.h>int N;int M;struct Student{//A stand for soccer,and B stand for rank//for example A[0] = 98 and B[0] = 1char ID[6];int A[4];int B[4];int equal;};void initial_equal(Student *S){for(int i =0;i<N;i++){S[i].equal = 0;}}void sort_course(int course_number,Student *S){initial_equal(S);int co = course_number;Student temp;int j;for(int i =0;i<N;i++){j = i;temp = S[i];while((temp.A[co]>=S[j-1].A[co])&&j>0){if(temp.A[co] == S[j-1].A[co]) S[j-1].equal = 1;S[j] = S[j-1];j--;}S[j] = temp;}for(int i =0;i<N;i++){if(S[i].equal == 1) S[i].B[co] = S[i-1].B[co];else S[i].B[co] = i+1;}}void sort_student(Student *S){int i =0;for(i = 0;i<4;i++){sort_course(i,S);}}void out_bestRank(Student S){int flag;flag = 0;for(int i =1;i<4;i++){if(S.B[i]<S.B[flag]) flag = i;}printf("%d ",S.B[flag]);switch(flag){case 0:printf("A\n");break;case 1:printf("C\n");break;case 2:printf("M\n");break;case 3:printf("E\n");break;default:printf("error\n");}}int main(){scanf("%d%d",&N,&M);Student S[2000];for(int i =0;i<N;i++){scanf("%s%d%d%d",&S[i].ID,&S[i].A[1],&S[i].A[2],&S[i].A[3]);S[i].A[0] = (S[i].A[1]+S[i].A[2]+S[i].A[3])/3;}sort_student(S);char student_id[6];int j;for(int i = 0;i<M;i++){scanf("%s",&student_id);for( j =0;j<N;j++){if(strcmp(student_id,S[j].ID)==0){out_bestRank(S[j]);break;}}if(j==N)printf("N/A\n");}}


0 0
原创粉丝点击