原題鏈接:PAT (Basic Level) Practice (中文)1015 德才論
做前思考
1号阿、用結(jié)構(gòu)來做此類排序題。
2级零、用qsort進行排序完疫。
做后總結(jié)
簡單題(無)
#include<stdio.h>
#include<stdlib.h>
struct man
{
int num;
int de;
int cai;
int sum;
};
int cmp(const void*a,const void*b)
{
struct man *m1=(struct man*)a;
struct man *m2=(struct man*)b;
if(m1->sum!=m2->sum) return m2->sum-m1->sum;
else if(m1->de!=m2->de) return m2->de-m1->de;
else if(m1->num!=m2->num) return m1->num-m2->num;
else return 0;
}
int main()
{
int i,j1=0,j2=0,j3=0,j4=0,n,l,h,num1,de1,cai1;
scanf("%d%d%d",&n,&l,&h);
struct man MAN1[100000]={0},MAN2[100000]={0},MAN3[100000]={0},MAN4[100000]={0};
for(i=0;i<n;i++)
{
scanf("%d%d%d",&num1,&de1,&cai1);
if(de1>=h&&cai1>=h)
{
MAN1[j1].num=num1;
MAN1[j1].de=de1;
MAN1[j1].cai=cai1;
MAN1[j1].sum=de1+cai1;
j1++;
}else if(de1>=h&&cai1<h&&cai1>=l)
{
MAN2[j2].num=num1;
MAN2[j2].de=de1;
MAN2[j2].cai=cai1;
MAN2[j2].sum=de1+cai1;
j2++;
}else if(cai1<h&&cai1>=l&&de1<h&&de1>=l&&de1>=cai1)
{
MAN3[j3].num=num1;
MAN3[j3].de=de1;
MAN3[j3].cai=cai1;
MAN3[j3].sum=de1+cai1;
j3++;
}else if(cai1>=l&&cai1>de1&&de1>=l)
{
MAN4[j4].num=num1;
MAN4[j4].de=de1;
MAN4[j4].cai=cai1;
MAN4[j4].sum=de1+cai1;
j4++;
}
}
qsort(MAN1,j1,sizeof(struct man),cmp);
qsort(MAN2,j2,sizeof(struct man),cmp);
qsort(MAN3,j3,sizeof(struct man),cmp);
qsort(MAN4,j4,sizeof(struct man),cmp);
printf("%d\n",j1+j2+j3+j4);
for(i=0;i<j1;i++) printf("%d %d %d\n",MAN1[i].num,MAN1[i].de,MAN1[i].cai);
for(i=0;i<j2;i++) printf("%d %d %d\n",MAN2[i].num,MAN2[i].de,MAN2[i].cai);
for(i=0;i<j3;i++) printf("%d %d %d\n",MAN3[i].num,MAN3[i].de,MAN3[i].cai);
for(i=0;i<j4;i++) printf("%d %d %d\n",MAN4[i].num,MAN4[i].de,MAN4[i].cai);
return 0;
}