PTA(Basic Level) 1015:德才论(C语言实现)

PTA(Basic Level) 1015:德才论(C语言实现)

分析:按照德才分数有资格被考虑录取(德分才分均大于L)的情况分四种:
①德分>=H && 才分 >=H
②德分>=H && 才分 ③德分=才分
④德分 每种情况都按总分排序,如果总分相同,按照德分降序排列,如果德分也相同就按照准考证升序排列。
且输出按照 ①、②、③、④这几种情况排序后的结果输出。

参考:添加链接描述
快排参考链接:添加链接描述

#include 
#include 
#include 
struct student
{
	char num[9];
	int d;
	int c;
};

int cmp(const void *a, const void *b)
{
	struct student *p=(struct student*)a;
	struct student *q=(struct student*)b;
	if(p->d+p->c == q->d+q->c)//总分相同
	{
		if(p->d == q->d)//德分相同
			return strcmp(p->num,q->num);//准考证升序排序
		else//德分不同
			return q->d-p->d;//德分降序排序
	}
	else//总分不同
		return (q->d+q->c) - (p->d+p->c);//总分降序
}

void print(struct student *p,int n)
{
	int i;
	for(i=0; i<n; i++,p++)
		printf("%s %d %d\n",p->num,p->d,p->c);
}

int main()
{	
	int n,i,l,h,i1=0,i2=0,i3=0,i4=0,count=0;
	struct student stu, *s1, *s2, *s3, *s4;
	scanf("%d%d%d",&n,&l,&h);
	s1=(struct student*)malloc(sizeof(struct student)*n);
	s2=(struct student*)malloc(sizeof(struct student)*n);
	s3=(struct student*)malloc(sizeof(struct student)*n);
	s4=(struct student*)malloc(sizeof(struct student)*n);
	for(i=0; i<n; i++)
	{
		scanf("%s%d%d",stu.num,&stu.d,&stu.c);
		if(stu.d>=l && stu.c>=l)
		{
			count++;
			if(stu.d>=h && stu.c>=h)//德才兼备
				s1[i1++]=stu;
			else if(stu.d>=h)//才小于h且德胜才
				s2[i2++]=stu;
			else if(stu.d>=stu.c)//德才兼亡且德胜才
				s3[i3++]=stu;
			else if(stu.d<stu.c)
				s4[i4++]=stu;
		}
	}

	qsort(s1,i1,sizeof(struct student),cmp);
	qsort(s2,i2,sizeof(struct student),cmp);
	qsort(s3,i3,sizeof(struct student),cmp);
	qsort(s4,i4,sizeof(struct student),cmp);
	printf("%d\n",count);
	print(s1,i1);
	print(s2,i2);
	print(s3,i3);
	print(s4,i4);
	return 0;
}

你可能感兴趣的:(PTA(basic,level))