PAT甲级 1036 男孩女孩

原题链接

给定 N 个学生的成绩信息,请你求出女生第一名与男生倒数第一名的分数差距。

输入格式
第一行输入整数 N,表示学生数量。

接下来 N 行,每行包含一个学生的姓名,性别,ID和成绩。其中姓名和ID是长度不超过 10 且不包含空格的字符串。性别为 F(女)或 M(男)。成绩是一个范围在 [0,100] 的整数。保证所有学生的成绩互不相同。

输出格式
输出共三行。

第一行输出女生第一名的姓名和ID。

第二行输出男生倒数第一名的姓名和ID。

第三行输出女生第一名的成绩减去男生倒数第一名的成绩的差。

如果不存在某个性别的学生,则在对应行输出 Absent。

在第三行输出 NA。

数据范围
1≤N≤101
输入样例1:
3
Joe M Math990112 89
Mike M CS991301 100
Mary F EE990830 95
输出样例1:
Mary EE990830
Joe Math990112
6
输入样例2:
1
Jean M AA980920 60
输出样例2:
Absent
Jean AA980920
NA

我的解法:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string male,female,mid,fid;
    int mscore,fscore;
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        string name,sex,id;
        int grade;
        cin>>name>>sex>>id>>grade;
        //女生最高分
        if(female.empty()&&sex=="F"||sex=="F"&&fscore<grade){
            female=name;
            fscore=grade;
            fid=id;
        }
        //男生最低分
        else if(male.empty()&&sex=="M"||sex=="M"&&mscore>grade){
            male=name;
            mscore=grade;
            mid=id;
        }
    }
    if(female.empty()){
        cout<<"Absent"<<endl;
    }
    else{
        cout<<female<<" "<<fid<<endl;
    }
    if(male.empty()){
        cout<<"Absent"<<endl;
    }
    else{
        cout<<male<<" "<<mid<<endl;
    }
    if(male.empty()||female.empty()){
        cout<<"NA"<<endl;
    }
    else{
        cout<<abs(mscore-fscore)<<endl;
    }
    return 0;
}

收获:

abs()函数求绝对值

猜你喜欢

转载自blog.csdn.net/weixin_45660485/article/details/124919000