PAT 甲级 1025 PAT Ranking (25)(25 分)

题目:

题目大意:

PAT考试又N个考场(N<=100),每个考场有K个考生(K<=300),输入考场的各个考生的准考证号和成绩,输出总考生人数,各个考生的准考证号、总排名、考场号、考场内排名。

解题思路:

在结构体类型Student中存放准考证号、考场号、分数和考场排名。读入每个考生的准考证号和成绩,对考生的信息进行存储。每输完一个考场内的考生信息后,就进行排序,得到考生的考场内排名。最后输入完全部考场考生信息后,再对所有考生的排名进行排序,然后一边计算总排名一边输出最后题目要我们输出的信息。

参考代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

struct Student{
    char registration_number[15];        //准考证号
    int location_number;             //考场号
    int score;              //分数
    int local_rank;            //考场排名
  }inf[30001];
  bool cmp(Student a,Student b)
  {
    if(a.score != b.score)
      return a.score>b.score;
    else return strcmp(a.registration_number,b.registration_number) < 0;
  }

int main()
{
  int j,n,temp = 0,x,sum = 0;
  scanf("%d",&n);     //n个考场
  for(int i = 0;i < n; i++)
  {
    scanf("%d",&x);      //存储考场考生人数
    sum += x;           //总人数
    for(j = temp; j < temp + x; j++)
    {
      scanf("%s %d",inf[j].registration_number,&inf[j].score);
      inf[j].location_number = i + 1;
    }
    sort(inf + temp,inf + temp + x,cmp);
    inf[temp].local_rank = 1;                     //排序后,考场排名第一位的为第一名
    for(j = temp + 1;j < temp + x;j++)            //对考场之后的名次进行排序
    {
      if(inf[j].score == inf[j-1].score)
      {
        inf[j].local_rank = inf[j-1].local_rank;
      }else
      {
        inf[j].local_rank = j - temp +1;
      }
    }
    temp = j;                                   //此处temp为下一个考场的考生存储的下标位置
  }
  sort(inf,inf + sum,cmp);
  printf("%d\n",sum);
  temp = 1;                                   //此时temp记录总名次
  printf("%s %d %d %d\n",inf[0].registration_number,temp,inf[0].location_number,inf[0].local_rank);
  for(j =1;j<sum;j++)
  {
    if(inf[j].score == inf[j-1].score)
      printf("%s %d %d %d\n",inf[j].registration_number,temp,inf[j].location_number,inf[j].local_rank);
    else
    {
      temp = j+1;
      printf("%s %d %d %d\n",inf[j].registration_number,temp,inf[j].location_number,inf[j].local_rank);
    }
  }
  return 0;
}

猜你喜欢

转载自blog.csdn.net/zz744670705/article/details/81281981
今日推荐