当前位置: 代码迷 >> 综合 >> 1367 成绩排名
  详细解决方案

1367 成绩排名

热度:78   发布时间:2023-12-05 17:53:57.0

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
14
1023 88 75 65
1033 99 59 70
1187 77 86 83
1054 64 86 92
2

输出样例

1033 99 59 701054 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;}