结构体排序问题

来源:互联网 发布:网络理财 富通贷 编辑:程序博客网 时间:2024/06/08 11:26

此题涉及到:

        结构体排序  000010的输出(%06d) 字符串的排序

题目链接:

        https://cn.vjudge.net/problem/HDU-1862

AC代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct aa{    int xx;//学号    int text;//成绩    char name[10];//姓名} a[100001];bool cmp(aa x,aa y){    return x.xx<y.xx;}bool cmp1(aa x,aa y){    if(strcmp(x.name,y.name)==0)//名字相同时,按照学号递增排序        return x.xx<y.xx;    return strcmp(x.name,y.name)<0;//按照非递减字典序排序}bool cmp2(aa x,aa y){    if(x.text==y.text)//成绩相同时,按照学号递增排序        return x.xx<y.xx;    return x.text<y.text;}int main(){    int n1,m1,sum;    sum=1;    while(~scanf("%d%d",&n1,&m1))    {        if(n1==0)            break;        else        {            for(int i=0; i<n1; i++)                scanf("%d %s %d",&a[i].xx,a[i].name,&a[i].text);            if(m1==1)                sort(a,a+n1,cmp);//学号排序            else if(m1==2)                sort(a,a+n1,cmp1);//姓名排序            else if(m1==3)                sort(a,a+n1,cmp2);            printf("Case %d:\n",sum++);//成绩排序            for(int i=0; i<n1; i++)                printf("%06d %s %d\n",a[i].xx,a[i].name,a[i].text);        }    }}

strcmp的用法:http://blog.csdn.net/gsd4_chenmeng/article/details/78368306