C语言排序输出问题

题目:
大考过后,各科老师都想知道自己的课程,谁考得最高。可是面对海量的数据,老师再次选择求助于你。

Input
先输入一个整数n,表示有n个学生。(0 < n < 3000)
接下来n行,每行有四个数据,分别代表学号、语文成绩、数学成绩和英语成绩。
最后输入一个整数t,其中t=1表示语文老师,t=2表示数学老师,t=3表示英语老师。

Output
根据t的取值输出对应任课教师的课程分数最高的学生信息,即符合条件的学生的学号及所有成绩。有多个学生该课程成绩相同的,则按照学号的升序一同输出这些学生信息。

Sample Input
4
1023 88 75 65
1033 99 59 70
1187 77 86 83
1054 64 86 92
1

Sample Output
1033 99 59 70

=============================
如何做到“有多个学生该课程成绩相同的,则按照学号的升序一同输出这些学生信息。”
=============================
我的答案:
#include<stdio.h>
struct data
{
char num;
int a;
int b;
int c;
};
void main()
{
data s[3000];
int i,n,m;
int t;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%c",&s[i].num);
scanf("%d",&s[i].a);
scanf("%d",&s[i].b);
scanf("%d",&s[i].c);
}
scanf("%d",&t);
if(t==1)
{m=s[0].a;
for(i=0;i<n;i++)
{
if(s[i].a>=m)
m=s[i].a;
}
for(i=0;i<n;i++)
{
if(s[i].a==m)
printf("%d %d %d %d\n",s[i].num,s[i].a,s[i].b,s[i].c);
}
}
if(t==2)
{m=s[0].b;
for(i=0;i<n;i++)
{
if(s[i].b>=m)
m=s[i].b;
}
for(i=0;i<n;i++)
{
if(s[i].b==m)
printf("%d %d %d %d\n",s[i].num,s[i].a,s[i].b,s[i].c);
}
}
if(t==3)
{m=s[0].c;
for(i=0;i<n;i++)
{
if(s[i].c>=m)
m=s[i].c;
}
for(i=0;i<n;i++)
{
if(s[i].c==m)
printf("%d %d %d %d\n",s[i].num,s[i].a,s[i].b,s[i].c);
}
}
}

作完按成绩排序后,设立循环检测成绩相同学生信息在链表或数组中的起终点,对这两点之间的学生再按学号排序。或者,先按学号排序,再选择稳定型排序法按成绩排序,就能达到题目的要求。追问

求具体代码

追答

都给你说那么仔细了,也不先尝试一下。弄好了,但说字数超了,你也没有私信,看怎么弄给你。光写我加的部分肯定没有超,但你的代码有错,是连改错的全部,所以才超了。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答