Skip to content

Latest commit

 

History

History
50 lines (41 loc) · 1.91 KB

1036. Boys vs Girls.md

File metadata and controls

50 lines (41 loc) · 1.91 KB

【PAT A-1036】Boys vs Girls

题意概述

求男生的最低成绩和女生的最高成绩之差。

输入输出格式

第一行给出一个正整数 n,表示要读取 n 个学生,接下来的 n 行,每行按姓名 性别 ID 成绩的格式给出一个学生的信息。其中姓名和 ID 为不超过 10 个字符且不包含空格符的字符串。性别为F时表示女生;为M时表示男生。成绩为$[0,100]$之间的整数。

第一行输出拥有最高成绩的女生的姓名和 ID。第二行输出拥有最低成绩的男生的姓名和 ID。第三行输出女生的最高成绩减去男生的最低成绩的结果。如果输入没有男生或女生,则对应行输出Absent,第三行输出NA

算法设计

可以定义一个 Person 类,包括四个数据成员:姓名 name、性别 gender、id、成绩 grade。读取学生信息的过程不断更新最高成绩女生的信息和最低成绩的男生的信息,最后按要求进行输出即可。

C++代码

#include <bits/stdc++.h>
using namespace std;
using gg = long long;
struct Person {
    string name, gender, id;
    gg grade;
    Person(gg g) : grade(g) {}
};
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    Person m(101), fm(-1), temp(0);
    gg ni;
    cin >> ni;
    while (ni--) {
        cin >> temp.name >> temp.gender >> temp.id >> temp.grade;
        if (temp.gender == "M" and temp.grade < m.grade) {
            m = temp;
        } else if (temp.gender == "F" and temp.grade > fm.grade) {
            fm = temp;
        }
    }
    fm.grade == -1 ? (cout << "Absent\n") :
                     (cout << fm.name << " " << fm.id << "\n");
    m.grade == 101 ? (cout << "Absent\n") :
                     (cout << m.name << " " << m.id << "\n");
    fm.grade == -1 or m.grade == 101 ? (cout << "NA\n") :
                                       (cout << fm.grade - m.grade);
    return 0;
}