首页 > 其他 > 详细

PAT1025

时间:2019-08-30 16:35:59      阅读:75      评论:0      收藏:0      [点我收藏+]

这道题是照着晴神的来敲,但是自己技术太渣,中间还是出现了不少问题。

1.学习到排序的做法,利用algorithm库的sort(begin,end,cmp),自己按照题目要求来完成cmp的编写

可能经常会用到cstring库的strcmp(a,b),是个好东西,a>b返回正数,==返回0,小于返回负数

2.如果排序题中的个体是有很多用于排序的私人信息的话,可以使用struct来囊括

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;
struct student{
    char rn[15]; //准考号 
    int score;  //分数 
    int ln;  //场次号
    int lr;  //本场排名 
};

student stu[30001];

bool cmp(const student &a,const student &b){
    if(a.score!=b.score) return a.score>b.score;
    else return strcmp(a.rn,b.rn)<0;  //准考号小的排在前面 
}

int main(){
    freopen("in.txt","r",stdin);
    
    int n,num=0; //n为考场的数量,num为总人数 
    scanf("%d",&n);

    for(int i=1;i!=n+1;++i){
        int k;  //本场人数 
        scanf("%d",&k);
        for(int j=0;j!=k;++j){
            scanf("%s %d",stu[num].rn,&stu[num].score);
            stu[num].ln=i;
            num++;
        }
        
        sort(stu+num-k,stu+num,cmp);  //当前场次排序
        stu[num-k].lr= 1;
        for(int j=1;j!=k;j++){
            if(stu[num-k+j].score==stu[num-k+j-1].score)
                stu[num-k+j].lr=stu[num-k+j-1].lr;
            else stu[num-k+j].lr=j+1;
        }    
    }
    printf("%d",num);
    sort(stu,stu+num,cmp);
    int r=1;
    for(int i=0;i!=num;i++){
        printf("\n");
        if(i!=0 && stu[i].score!=stu[i-1].score)
            r=i+1;
        printf("%s %d %d %d",stu[i].rn,r,stu[i].ln,stu[i].lr);
    }
    
    return 0;
}

 

PAT1025

原文:https://www.cnblogs.com/chuan-chuan/p/11435226.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!