#include<stdio.h>
#include<stdlib.h>
typedef struct Stu
{
int xuehao;
int score_d;
int score_c;
int flag;
}Stu;
int cmp1(const void *a,const void *b)
{
if( (((Stu *)a)->score_d+((Stu *)a)->score_c<(((Stu *)b)->score_d+((Stu *)b)->score_c)) )
return 1;
else if( (((Stu *)a)->score_d+((Stu *)a)->score_c==(((Stu *)b)->score_d+((Stu *)b)->score_c)) )
{
if( ((Stu *)a)->score_d<((Stu *)b)->score_d )
return 1;
else if( ((Stu *)a)->score_d==((Stu *)b)->score_d )
{
if( ((Stu *)a)->xuehao>((Stu *)b)->xuehao )
return 1;
else return -1;
}
else return -1;
}
else return -1;
}
int main()
{
int n,l,h;
Stu *stu,*stu1;
int i,j,n1,n2,n3,n4;
while(~scanf("%d%d%d",&n,&l,&h))
{
stu=(Stu *)malloc(n*sizeof(Stu));
for(i=0;i<n;i++)
scanf("%d%d%d",&stu[i].xuehao,&stu[i].score_d,&stu[i].score_c);
stu1=(Stu *)malloc(n*sizeof(Stu));
j=0;
for(i=0;i<n;i++)
{
if(stu[i].score_d>=h&&stu[i].score_c>=h){
stu[i].flag=1;
stu1[j]=stu[i];
j++;
}
}
n1=j;
for(i=0;i<n;i++)
{
if(stu[i].score_d>=h&&stu[i].score_c>=l&&stu[i].flag!=1){
stu[i].flag=1;
stu1[j]=stu[i];
j++;
}
}
n2=j;
for(i=0;i<n;i++)
{
if(stu[i].flag!=1&&stu[i].score_d>=stu[i].score_c&&stu[i].score_d>=l&&stu[i].score_c>=l){
stu[i].flag=1;
stu1[j]=stu[i];
j++;
}
}
n3=j;
for(i=0;i<n;i++)
{
if(stu[i].flag!=1&&stu[i].score_d>=l&&stu[i].score_c>=l){
stu[i].flag=1;
stu1[j]=stu[i];
j++;
}
}
n4=j;
qsort(stu1,n1,sizeof(stu1[0]),cmp1);
qsort(&stu1[n1],n2-n1,sizeof(stu1[0]),cmp1);
qsort(&stu1[n2],n3-n2,sizeof(stu1[0]),cmp1);
qsort(&stu1[n3],n4-n3,sizeof(stu1[0]),cmp1);
printf("%d\n",n4);
for(i=0;i<n4;i++)
printf("%d %d %d\n",stu1[i].xuehao,stu1[i].score_d,stu1[i].score_c);
}
}瞬间,感觉自己有救了!搞定一道困扰我好久的一类题目!用C语言做这类题目的确有些痛苦!在坚持研究C,之后再转战C++!
1015_德才论 (25)
最新推荐文章于 2021-04-13 21:50:14 发布
本文介绍了一段使用C语言实现的学生信息排序程序,通过结构体和指针操作对学生学号、学科成绩进行条件筛选和多级排序。适用于初学者理解和实践C语言中结构体的应用及qsort函数的使用。
2629

被折叠的 条评论
为什么被折叠?



