pat1025PAT Ranking (25)

来源:互联网 发布:sql删除重复字段数据 编辑:程序博客网 时间:2024/06/06 00:58

题意分析:

(1)给出多个考点的考试人数以及考生考号和成绩,求出所有参加考试的人最终排名、考场编号、本考场排名

(2)水题,考察排序,排名的规则按照以前的做法:按分数由高到低,同分同名次,不同分,按其在序列中的位置算排名

可能坑点:

#include <iostream>#include <algorithm>using namespace std;struct testee{    string ID;    int location;    int score;    int finalRank;    int localRank;};testee stu[30001];bool cmp(testee a,testee b){    if(a.score!=b.score)return a.score>b.score;    else return a.ID<b.ID;}void getLocalRank(int start,int end){    stu[start].localRank=1;    int currentScore=stu[start].score;    int currentRank=stu[start].localRank;    for(int i=start;i<end;i++)    {        if(stu[i].score==currentScore)stu[i].localRank=currentRank;        else        {            stu[i].localRank=i+1-start;            currentScore=stu[i].score;            currentRank=stu[i].localRank;        }    }}void getFinalRank(int start,int end){    stu[start].finalRank=1;    int currentScore=stu[start].score;    int currentRank=stu[start].finalRank;    for(int i=start;i<end;i++)    {        if(stu[i].score==currentScore)stu[i].finalRank=currentRank;        else        {            stu[i].finalRank=i+1;            currentScore=stu[i].score;            currentRank=stu[i].finalRank;        }    }}int main(){    int N,K,i=1,k=0;    cin>>N;    while(i<=N)    {        cin>>K;        int j=0;        while(j<K)        {            cin>>stu[k].ID>>stu[k].score;            stu[k].location=i;            k++;            j++;        }        sort(&stu[k-K],&stu[k],cmp);        getLocalRank(k-K,k);        i++;    }    sort(&stu[0],&stu[k],cmp);    getFinalRank(0,k);    cout<<k<<endl;    for(int i=0;i<k;i++)    {        cout<<stu[i].ID<<" "<<stu[i].finalRank<<" "<<stu[i].location<<" "<<stu[i].localRank<<endl;    }    return 0;}


0 0
原创粉丝点击