PAT A 1036

来源:互联网 发布:淘宝信誉评级极好优秀 编辑:程序博客网 时间:2024/06/09 15:04

题目

给出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;}
0 0
原创粉丝点击