pat 乙 1015. 德才论

来源:互联网 发布:天地伟业监控软件 编辑:程序博客网 时间:2024/05/02 02:10
#include<iostream>#include<algorithm>#include<vector>#include<cstring>using namespace std;struct Student{    char id[10];    int moral;    int talent;};bool Cmp(Student a,Student b){    if((a.moral+a.talent)!=(b.moral+b.talent))  //首先比较总分     return a.moral+a.talent>b.moral+b.talent;    else                                        //总分相同比较德分     {        if(a.moral!=b.moral)        {            return a.moral>b.moral;                 }        else         {        /*strcmp是比较两个字符串的大小,两个字符串相同时返回0,        第一个字符串大于第二个字符串时返回一个正值,否则返回负值.        比较两个字符串的算法是:逐个比较两个串中对应的字符,字符大小按照ASCII码值确定,        从左向右比较,如果遇到不同字符,所遇第一对不同字符的大小关系就确定了两个字符串的大小关系,        如果未遇到不同字符而某个字符串首先结束,那么这个字符串是较小的,否则两个字符串相等。*/         return strcmp(a.id,b.id)<0;            //德分相同比较id         }    } }int main(){    int count=0;    vector<Student>v1,v2,v3,v4;     Student students;    int N,L,H;    scanf("%d%d%d",&N,&L,&H);     for(int i=0;i<N;i++)    {   //输入数据的时候顺便分类         scanf("%s%d%d",students.id,&students.moral,&students.talent);        if(students.moral>=L&&students.talent>=L)        {            count++;            //第一类考生             if(students.moral>=H&&students.talent>=H)            v1.push_back(students);             //第二类             else if(students.moral>=H&&students.talent<H)             v2.push_back(students);             //第三类             else if(students.moral<H&&students.talent<H&&students.moral>=students.talent)            v3.push_back(students);             //余下为第四类             else v4.push_back(students);            }    }    sort(v1.begin(),v1.end(),Cmp);//Cmp为自定义的比较函数     sort(v2.begin(),v2.end(),Cmp);    sort(v3.begin(),v3.end(),Cmp);    sort(v4.begin(),v4.end(),Cmp);        printf("%d\n",count);         vector<Student>::iterator iter;//迭代器遍历vector         for(iter=v1.begin();iter!=v1.end();iter++)        printf("%s %d %d\n",iter->id,iter->moral,iter->talent);          for(iter=v2.begin();iter!=v2.end();iter++)        printf("%s %d %d\n",iter->id,iter->moral,iter->talent);          for(iter=v3.begin();iter!=v3.end();iter++)        printf("%s %d %d\n",iter->id,iter->moral,iter->talent);          for(iter=v4.begin();iter!=v4.end();iter++)        printf("%s %d %d\n",iter->id,iter->moral,iter->talent);     return 0;   } 

0 0
原创粉丝点击