题目
给出n行学生的数据,每行数据表示一个学生格式为 姓名 性别 ID 分数,输出女生最高分的学生的姓名、ID、男生最低分的姓名、ID,以及这两个分数的差。
I/O
Sample Input 1:
3
Joe M Math990112 89
Mike M CS991301 100
Mary F EE990830 95
Sample Output 1:
Mary EE990830
Joe Math990112
6
Sample Input 2:
1
Jean M AA980920 60
Sample Output 2:
Absent
Jean AA980920
NA
算法
发现这道输入输出睡题,不需要算法,练习struct。
每次读入直接处理,维护最高最低分和其所在的学生编号。
O(n).
代码
#include<cstdio>
#include<iostream>
using namespace std;
struct stu_info
{ char name[12];
char gender;
char ID[12];
int grade;
} stu[100];
int main()
{ int n;
scanf("%d", &n);
int M_lowGrade = 100, F_hiGrade = 0;
int low_i, hi_i;
bool isMale = 0, isFemale = 0;
for(int i = 0; i<n; i++)
{ cin >> stu[i].name >> stu[i].gender >> stu[i].ID >> stu[i].grade;
if(stu[i].gender == 'M') isMale = 1;
if(stu[i].gender == 'F') isFemale = 1;
if(stu[i].gender == 'M' && stu[i].grade<M_lowGrade)
{ M_lowGrade = stu[i].grade;
low_i = i;
}
if(stu[i].gender == 'F' && stu[i].grade>F_hiGrade)
{ F_hiGrade = stu[i].grade;
hi_i = i;
}
}
int diff = F_hiGrade - M_lowGrade, flag = 1;
if(isFemale) printf("%s %s\n", stu[hi_i].name, stu[hi_i].ID);
else {flag = 0; printf("Absent\n");}
if(isMale) printf("%s %s\n", stu[low_i].name, stu[low_i].ID);
else {flag = 0; printf("Absent\n");}
if(flag) printf("%d", diff);
else printf("NA");
return 0;
}