#PAT完美通关14
##题解
###题目分析
这道题的重点是对储存在结构体中的学生进行排序。
###要点
1.对不同分类等级的学生应额外创建一个结构体对象k[].f,记入学生所在优先批次。
2.学会了cmp和qsort的用法.
##代码
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int num,d,c,f;
}STU;
int cmp(const void *q,const void *p)
{
STU s1=*(STU *)q;
STU s2=*(STU *)p;
if(s1.f!=s2.f)
return s1.f-s2.f;
else if((s1.c+s1.d)!=(s2.c+s2.d))
return (s2.c+s2.d)-(s1.c+s1.d);
else if(s1.d!=s2.d)
return s2.d-s1.d;
else
return s1.num-s2.num;
}
int main()
{
int i,n,d,c,L,H,count=0;
scanf("%d%d%d",&n,&L,&H);
STU k[n];
for(i=0;i<n;i++)
{
scanf("%d%d%d",&k[i].num,&k[i].d,&k[i].c);
if(k[i].d>=L&&k[i].c>=L)
{
count+=1;
if(k[i].d>=H&&k[i].c>=H)
k[i].f=1;
else if(k[i].d>=H)
k[i].f=2;
else if(k[i].d>=k[i].c)
k[i].f=3;
else
k[i].f=4;
}
else
k[i].f=5;
}
qsort(k,n,sizeof(STU),cmp);
printf("%d\n",count);
for(i=0;i<count;i++)
{
printf("%08d %d %d\n",k[i].num,k[i].d,k[i].c);
}
}