题目描述
计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,为企业选拔人才提供参考标准(网址http://www.patest.cn)。
每次考试会在若干个不同的考点同时举行,每个考点用局域网,产生本考点的成绩。考试结束后,各个考点的成绩将即刻汇总成一张总的排名表。
现在就请你写一个程序自动归并各个考点的成绩并生成总排名表。
输入格式
输入的第一行给出一个正整数N( ≤ 100),代表考点总数。随后给出N个考点的成绩,格式为:首先一行给出正整数K( ≤ 300),代表该考点的考生总数;随后K行,每行给出1个考生的信息,包括考号(由13位整数字组成)和得分(为[0,100]区间内的整数),中间用空格分隔。
输出格式
首先在第一行里输出考生总数。随后输出汇总的排名表,每个考生的信息占一行,顺序为:考号、最终排名、考点编号、在该考点的排名。其中考点按输入给出的顺序从1到N编号。考生的输出须按最终排名的非递减顺序输出,获得相同分数的考生应有相同名次,并按考号的递增顺序输出。
输入样例
在这里给出一组输入。例如:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
输出样例
在这里给出相应的输出。例如:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4
思路:
1.本题需要知道每一个考生的考场号,总排名,以及在各自考场的排名,因此需要用到结构体
2.考点号用site表示,总排名用orders表示,各自考场排名用order1表示
3.在输入时因为需要区分开各个考点的考生,因此循环不能从0开始,需要用一个变量进行累计
4.各自考场的排名必须放在输入循环的后面进行判断,即输入一个考场判断一个考场
5.总排名放到全部输入完以后进行排名
6.排名方法,用for循环嵌套,排名初始值定位1,寻找后面有几个比当前分数大的,有几个,排名加几
7.最后需要按成绩进行排序,同时需要注意分数相同时,还需要比较考号顺序
代码:
#include<stdio.h>
struct st
{
char id[20];
int score;
int site;
int orders;
int order1;
};
struct st a[20];
struct st w;
int main()
{
int N;
scanf("%d",&N);
int c=0;
int d;
int i,j,k;
for(i=0; i<N; i++)
{
scanf("%d",&d);
for(j=c; j<d+c; j++)
{
scanf("%s%d",&a[j].id,&a[j].score);
a[j].site=i+1;
a[j].orders=1;
a[j].order1=1;
}
for(j=c; j<d+c; j++)
{
for(k=c; k<d+c; k++)
{
if(a[j].score<a[k].score)
{
a[j].order1++;
}
}
}
c=c+d;
}
for(i=0; i<c; i++)
{
for(j=0; j<c; j++)
{
if(a[i].score<a[j].score)
{
a[i].orders++;
}
}
}
for(i=0; i<c; i++)
{
for(j=i; j<c; j++)
{
if(a[i].score<a[j].score)
{
w=a[j];
a[j]=a[i];
a[i]=w;
}
}
}
for(i=0; i<c; i++)
{
for(j=i; j<c; j++)
{
if(a[i].score==a[j].score)
{
if(strcmp(a[i].id,a[j].id)>0)
{
w=a[j];
a[j]=a[i];
a[i]=w;
}
}
}
}
printf("%d\n",c);
for(i=0; i<c; i++)
{
printf("%s %d %d %d\n",a[i].id,a[i].orders,a[i].site,a[i].order1);
}
return 0;
}