这是个水题,我直接使用了库函数qsort进行了排序,然后输出前五个就可以了,唯一想要说的就是明天或后天把Glibc中的qsort代码看下,学习一下是怎么对超级巨大的数据量进行快速排序的,一个个交换肯定不是,这些都明天再说吧。
#include <stdio.h>
#include <stdlib.h>
#define MAX 300
struct grade{
int a, b, c;
int id;
}totle[MAX];
int compare(const void *a, const void *b)
{
struct grade i = *(struct grade *)a, j = *(struct grade *)b;
int sum1 = i.a + i.b + i.c,
sum2 = j.a + j.b + j.c;
if(sum1 == sum2){
if(i.a == j.a){
return i.id - j.id;
}
return j.a - i.a;
}
return sum2 - sum1;
}
int main(void)
{
int i;
int n;
scanf(%d, &n);
for(i = 0; i < n; i++){
totle[i].id = i + 1;
scanf(%d%d%d, &totle[i].a, &totle[i].b, &totle[i].c);
}
qsort(totle, n, sizeof(struct grade), compare);
for(i = 0; i < 5; i++){
printf(%d %d\\n, totle[i].id, totle[i].a + totle[i].b +
totle[i].c);
}
return 0;
}