PAT——1025 Ranking(排序 strcmp用法 sort)

题意链接:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
struct student{
    char name[20];
    int score;
    int b;
    int px1;
}stu[30010];
bool cmp(student p1,student p2)
{
    if(p1.score!=p2.score)

        return p1.score>p2.score;
        else
            return strcmp(p1.name,p2.name)<0;
}
int main()
{
    int m;
    int num=0;
    scanf("%d",&m);
    int k;
    for(int j=1;j<=m;j++)
    {
        scanf("%d",&k);
        for(int i=0;i<k;i++)
        {
            scanf("%s %d",stu[num].name,&stu[num].score);
            stu[num].b=j;
            num++;
        }
         sort(stu+num-k,stu+num,cmp);
         stu[num-k].px1=1;
         for(int j=num-k+1;j<num;j++)
         {
             if(stu[j].score==stu[j-1].score)
             {
                 stu[j].px1=stu[j-1].px1;
             }
             else
                stu[j].px1=j+1-(num-k);
         }
    }
    //sort(stu,t,px);
    printf("%d\n",num);
    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;
        printf("%s ",stu[i].name);
        printf("%d %d %d\n",r,stu[i].b,stu[i].px1);
    }
    return 0;
}

一开始卡住的点是

不知道如何存储

也就是一个数组 既要输出队内排序 也要输出整个排序

数组的下标不知道如何表示

其实num++     num-k 可以解决

还有一个问题

输出顺序

讲道理是按照成绩的总排名来排的

但是成绩一样 就只能按id号来排

id的存储用的是char类型的字符数组

所以cmp函数中不能直接return比较

所以要用strcmp函数(一般用来比较字符数组的字典序)

最后值得注意的是

输出最终排名时r的判断

成绩不等 直接顺序

相等直接上一个

所以从0开始

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/81584639
今日推荐