1367 成绩排名
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 4017 | 通过数 : 1519
题目描述
大考过后,各科老师都想知道自己的课程,谁考得最高。可是面对海量的数据,老师再次选择求助于你。
输入要求
先输入一个整数n,表示有n个学生。(0 < n < 3000)
接下来n行,每行有四个数据,分别代表学号、语文成绩、数学成绩和英语成绩。
最后输入一个整数t,其中t=1表示语文老师,t=2表示数学老师,t=3表示英语老师。
输出要求
根据t的取值输出对应任课教师的课程分数最高的学生信息,即符合条件的学生的学号及所有成绩。有多个学生该课程成绩相同的,则按照学号的升序一同输出这些学生信息。
输入样例
4 1023 88 75 65 1033 99 59 70 1187 77 86 83 1054 64 86 92 1 4 1023 88 75 65 1033 99 59 70 1187 77 86 83 1054 64 86 92 2
输出样例
1033 99 59 70 1054 64 86 92 1187 77 86 83
提示
当输入t为1时,表示要求输出语文课成绩最高的学生的所有信息。
来源
NBU OJ
代码如下:
#include<bits/stdc++.h>
typedef struct S{
int id;
int ch,ma,en;
}stu;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
stu s[n];
for(int i=0;i<n;i++)
{
scanf("%d",&s[i].id);
scanf("%d%d%d",&s[i].ch,&s[i].ma,&s[i].en);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(s[j].id>s[j+1].id)
{
stu t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
}
int t;
scanf("%d",&t);
int x;
if(t==1)
{
x=s[0].ch;
for(int i=0;i<n;i++)
{
if(s[i].ch>x)
{
x=s[i].ch;
}
}
for(int i=0;i<n;i++)
{
if(s[i].ch==x)
printf("%d %d %d %d\n",s[i].id,s[i].ch,s[i].ma,s[i].en);
}
}
if(t==2)
{
x=s[0].ma;
for(int i=0;i<n;i++)
{
if(s[i].ma>x)
{
x=s[i].ma;
}
}
for(int i=0;i<n;i++)
{
if(s[i].ma==x)
printf("%d %d %d %d\n",s[i].id,s[i].ch,s[i].ma,s[i].en);
}
}
if(t==3)
{
x=s[0].en;
for(int i=0;i<n;i++)
{
if(s[i].en>x)
{
x=s[i].en;
}
}
for(int i=0;i<n;i++)
{
if(s[i].en==x)
printf("%d %d %d %d\n",s[i].id,s[i].ch,s[i].ma,s[i].en);
}
}
}
return 0;
}