题目来源:码蹄集
https://matiji.net/exam/brushquestion/600/778/B3FCFEC101BD05189BB74D522E019504
参考程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 10000
struct StudentGrade{
char name[200];
int academic;
int moral;
int physical;
double totalGrade;
};
int gradeCMP(const void* p1, const void* p2){
struct StudentGrade* s1 = (struct StudentGrade*) p1;
struct StudentGrade* s2 = (struct StudentGrade*) p2;
if (s1->totalGrade == s2->totalGrade)
return strcmp(s2->name, s1->name);
return s1->totalGrade < s2->totalGrade;
}
struct StudentGrade students[MAX_N] = {0};
double gradeWight[3];
int main() {
int n;
scanf("%d", &n);
scanf("%lf%lf%lf", gradeWight, gradeWight+1, gradeWight+2);
for (int i = 0; i < n; i++){
scanf("%s%d%d%d", students[i].name, &students[i].academic,
&students[i].moral, &students[i].physical);
students[i].totalGrade = gradeWight[0]*students[i].academic
+ gradeWight[1]*students[i].moral
+ gradeWight[2]*students[i].physical;
}
qsort(students, n, sizeof(struct StudentGrade), gradeCMP);
for (int i = 0; i < n; i++){
printf("%s\n", students[i].name);
}
return 0;
}