PAT 甲级1025 PAT 考试分数排序
使用C(gcc);
学习心得:要仔细,qsort/sort函数以及比较函数使用的学习,strcmp使用。
qsort相关介绍百度百科以及别人的文章 https://blog.youkuaiyun.com/yisandezhuiqiu/article/details/52101667
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct _student
{
char regist[13];
int score;
int loca;
int locarank;
}student[30100];
//二维数组感觉排序的复杂度有点高,故用一维数组存放学生信息,存储略大于300*100
/*qsort() 调用的二维比较函数*/
int cmp(const struct _student *a,const struct _student *b)
{
if(a->score != b->score) return b->score - a->score; //成绩从高到低排序
else return strcmp(a->regist,b->regist); //报名号从小到大排序
}
int main()
{
int N,K,i,j,n=0,GRank=1;
scanf("%d",&N);
for(j=0;j<N;j++)
{
scanf("%d",&K);
for(i=0;i<K ;i++)
{
scanf("%s%d",student[n].regist,&student[n].score);
student[n].loca=j+1;
n++;
} //各考场信息读取
qsort(&student[n-K],K,sizeof(student[0]),cmp); //各考场风分别排序
student[n-K].locarank = 1;
for(i=0;i<K ;i++) //同分排序
{
if(student[n-K+i].score==student[n-K+i+1].score )
{
student[n-K+i+1].locarank = student[n-K+i].locarank;
}
else
{
student[n-K+i+1].locarank = i+2;
}
}
}
qsort(student,n,sizeof(student[0]),cmp); //全部排序
printf("%d\n",n);
for(j=0;j<n;j++) //同分排序
{
if(j>0 && student[j].score!=student[j-1].score)
{
GRank=j+1;
}
printf("%s %d %d %d\n",
student[j].regist,GRank,student[j].loca,student[j].locarank);
}
return 0;
}