快排专题 HDU—1862

来源:互联网 发布:前苏联十大实验知乎 编辑:程序博客网 时间:2024/06/05 16:53

第一题 EXCEL排序  HDU-1862

题目意思很简单,测试多组样例,按照规定的顺序排序。存储编号,姓名,成绩,可以用结构体。排序的话用快排就可以

但要注意快排并不知道结构体中的编号怎么排,不知道结构体中的姓名怎么排,不知道结构体中的成绩怎么排

我们就要重载运算符(这道题说白了就是文字题)

代码如下

#include<iostream>#include<algorithm>#include<string.h>#include<string>const int manx=10000000;using namespace std;struct com{    char num[16];    char name[15];    int sorce;} a[manx];bool tmp1(com x,com y){    return strcmp(x.num,y.num)<0;   //strcmp函数 进行字符串比较}bool tmp2(com x,com y){    if(strcmp(x.name ,y.name )!=0)    {        return strcmp(x.name ,y.name )<0;    }    else    {        return strcmp(x.num,y.num)<0;    }}bool tmp3(com x,com y){    if((x.sorce!=y.sorce))    {        return x.sorce<y.sorce;    }    else    {        return strcmp(x.num,y.num)<0;    }}int main(){    int n,c,kase=0;    while(cin>>n>>c&&(n!=0||c!=0))    {        for(int i=0; i<n; i++)            cin>>a[i].num>>a[i].name>>a[i].sorce;        cout<<"Case "<<(++kase)<<":"<<endl;        if(c==1)            sort(a,a+n,tmp1);        if(c==2)            sort(a,a+n,tmp2);        if(c==3)            sort(a,a+n,tmp3);        for(int i=0; i<n; i++)            cout<<a[i].num<<" "<<a[i].name<<" "<<a[i].sorce<<endl;    }    return 0;}

原创粉丝点击