C (gcc)_PAT A1025 (PAT Ranking)

PAT 甲级1025 PAT 考试分数排序

使用C(gcc);

学习心得:要仔细,qsort/sort函数以及比较函数使用的学习,strcmp使用。

qsort相关介绍百度百科以及别人的文章 https://blog.csdn.net/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;
} 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值