PAT A1025 pat ranking

Posted chuxinbubian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT A1025 pat ranking相关的知识,希望对你有一定的参考价值。

有n个考场,每个考场都有若干数量个考生,现给出各个考场中考生的准考证号和分数,要求将所有考生的分数从高到低排序,并输出

#include<iostream>
#include<string.h>
#include<algorithm>
//#include<map>

using namespace std;
struct Student
{
	char id[15];           //准考证号 
	int score;            //分数 
	int location_number;  //考场号 
	int location_rank;  //考场内排名	
} stu[30010];

bool cmp(Student a,Student b)
{
	if(a.score != b.score) return a.score> b.score; //按分数从高到底排序
	else return strcmp(a.id,b.id)<0; //分数按照准考证号从小到大排序	
} 

int main()
{
	int n,k,num=0;
	cin>>n;//n为考场数
	for(int i=0;i<n;i++)
	{
		cin>>k;
		for(int j=0;j<k;j++)
		{
		cin>>stu[num].id>>stu[num].score;
		stu[num].location_number=i;
		num++;	
	    } 
	sort(stu + num-k,stu+num,cmp);
	stu[num-k].location_rank=1;    //对于考场的第一名rank记为1
	for(int j = num-k+1;j<num;j++)
	{
		if(stu[j].score==stu[j-1].score)
		{
			stu[j].location_rank=stu[j-1].location_rank;
		}
		else
		{
			stu[j].location_rank=j+1-(num-k);
		}
	 } 
	}
	cout<<num<<endl;
	sort(stu,stu+num,cmp);
	int r=1;
	for (int i=0;i<num;i++)
	{
		if(i>0&&stu[i].score != stu[i-1].score)
		{
			r=i+1; 
		}
		cout<<stu[i].id;
		cout<<r<<stu[i].location_number<<stu[i].location_rank<<endl;
	}
	return 0;
}
/*
输入样例: 
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
*/
 

  

以上是关于PAT A1025 pat ranking的主要内容,如果未能解决你的问题,请参考以下文章

[PAT] A1025 PAT Ranking

[PAT] A1025 PAT Ranking

算法学习记录-排序题PAT A1025PAT Ranking

PAT A1025 pat ranking

PAT 甲级 A1025 (2019/02/17)

PAT (Advanced Level) 1025 PAT Ranking