#include <stdio.h>
#include <stdlib.h>
#include<string.h>
struct grades {
char num[100];
char name[100];
int math,chinese,english;
int sum;
struct grades *next;
};
typedef struct grades Grades,*GRADES;
int main() {
int n, i, sum1;
int chinese1, english1 ,math1 ;
char num1[100],name1[100];
GRADES head, p, g;
head = p = (GRADES)malloc(sizeof(Grades));
head->next=NULL;
scanf("%d",&n);
for(i = 1; i<=n; i++)
{
scanf("%s",num1);
scanf("%s",name1);
scanf("%d%d%d",&math1,&chinese1,&english1);
sum1 = math1 + chinese1 + english1;//输入数据
g = (GRADES)malloc(sizeof(Grades));
g->chinese = chinese1;
g->english = english1;
g->math = math1;
g->sum = sum1;
g->next = NULL;
strcpy(g->num,num1);
strcpy(g->name,name1);
p=head;
while(p->next!=NULL)//找到插入节点
{
if(p->next->sum < g->sum)
break;
if(p->next->sum == g->sum)
if(strcmp(p->next->num,g->num)<0)
break;
p=p->next;
}
g->next = p->next;//用头插法实现从高到低排序
p->next = g;
}
p = head->next;
while(p)//输出
{
printf("%s ",p->num);
printf("%s ",p->name);
printf("%d ",p->math);
printf("%d ",p->chinese);
printf("%d ",p->english);
printf("%d\n",p->sum);
p = p->next;
}
return 0;
}