现在的位置: 首页 > 综合 > 正文

浙大PAT 1062题 1062. Talent and Virtue

2018年02月06日 ⁄ 综合 ⁄ 共 1445字 ⁄ 字号 评论关闭
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Person{
    char id[10];
    int virtue;
    int talent;
}person;
//数组较大,开在main函数里面会出错; 
person ps[100005];
person p1[100005];
person p2[100005];
person p3[100005];
person p4[100005];
int cmp(const void *atmp,const void *btmp){
    person *a=(person *)atmp;  
    person *b=(person *)btmp;  
    if(a->virtue+a->talent!=b->virtue+b->talent){  
        return  a->virtue+a->talent<b->virtue+b->talent;
    }  
    else if(a->virtue!=b->virtue){  
        return a->virtue<b->virtue;  
    }  
    else{  
        return strcmp(a->id,b->id); 
    }  
    return 0;  
}  

int main(){
    int i,j;
    int n,l,h;
    int cnt1,cnt2,cnt3,cnt4;
    scanf("%d %d %d",&n,&l,&h);
    cnt1=cnt2=cnt3=cnt4=0;
    for(i=0;i<n;i++){
        scanf("%s %d %d",&ps[i].id,&ps[i].virtue,&ps[i].talent);
        if(ps[i].virtue<l||ps[i].talent<l){
            continue;                              
        }
        else if(ps[i].virtue>=h&&ps[i].talent>=h){
            p1[cnt1]=ps[i];
            cnt1++;                           
        }
        else if(ps[i].virtue>=h&&ps[i].talent<h){
            p2[cnt2]=ps[i];
            cnt2++;                           
        }
        else if(ps[i].virtue<h&&ps[i].talent<h&&ps[i].virtue>=ps[i].talent){
            p3[cnt3]=ps[i];
            cnt3++;                           
        }
        else {
            p4[cnt4]=ps[i];
            cnt4++;                           
        }
    }
    qsort(p1,cnt1,sizeof(person),cmp);
    qsort(p2,cnt2,sizeof(person),cmp);
    qsort(p3,cnt3,sizeof(person),cmp);
    qsort(p4,cnt4,sizeof(person),cmp);
    printf("%d\n",cnt1+cnt2+cnt3+cnt4);
    for(i=0;i<cnt1;i++){
        printf("%s %d %d\n",p1[i].id,p1[i].virtue,p1[i].talent);  
    }
    for(i=0;i<cnt2;i++){
        printf("%s %d %d\n",p2[i].id,p2[i].virtue,p2[i].talent);  
    }
    for(i=0;i<cnt3;i++){
        printf("%s %d %d\n",p3[i].id,p3[i].virtue,p3[i].talent);  
    }
    for(i=0;i<cnt4;i++){
        printf("%s %d %d\n",p4[i].id,p4[i].virtue,p4[i].talent);  
    }
    system("pause");
    return 0;
}

抱歉!评论已关闭.