PAT1028

“你是我做过最简单的25分题”

            ——谨以此开头献给 PAT1028

解题思路

这就是是一道字符串操作+排序的题目,相信每一位做多了PAT的盆友都不会对此陌生了,一顿sort,cmp操作就完结了,最多就是注意一些细节的东西,算法方面没有什么可说的。

直接贴代码好吧(逃

/*
    id是不会相同的,但是名字和成绩是可能会相同的,所以c==2、3的时候的cmp函数会复杂一点 
    sort结果为真,放到前面 
    cmp函数要使用严格的大于小于判定,不能含有相等 
*/

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
struct student{
    char id[7];
    char name[9];
    int grade;
}Student[100001];

bool cmp1(student a,student b){
    return strcmp(a.id,b.id) < 0;  //不能不写<0 ,id小的放到前面 
}

bool cmp2(student a,student b){
    return strcmp(a.name,b.name)==0 ? strcmp(a.id,b.id)<0 : strcmp(a.name,b.name)<0;  //名字相同情况下,id小的放到前面,名字不同则名字串小的放到前面 
}

bool cmp3(student a,student b){
    return a.grade==b.grade ? strcmp(a.id,b.id)<0 : a.grade<b.grade;
}

int main(){
    freopen("in.txt","r",stdin);
    int n,c;
    scanf("%d %d",&n,&c);
    for(int i=0;i<n;++i){
        scanf("%s %s %d",&Student[i].id,&Student[i].name,&Student[i].grade);
    }
    
    if(c==1){
        sort(Student,Student+n,cmp1);
    }
    else if(c==2){
        sort(Student,Student+n,cmp2);
    }
    else if(c==3){
        sort(Student,Student+n,cmp3);
    }
    
    for(int i=0;i<n;++i){
        printf("%s %s %d\n",Student[i].id,Student[i].name,Student[i].grade);
    } 
    return 0;
}

 

posted on 2019-10-26 09:23  川川——叮叮咚咚  阅读(153)  评论(0编辑  收藏  举报