考察:还是在一堆输入的元素里找最大和最小(其实就是加了个分类比较,分男女)
learn && wrong:
1、标准答案没有你这么复杂,初始化的时候只初试化了分数,没有初试化性别,
2、比较也不需要函数,只需要判断读入的是M还是F,然后比较分数,更新结构体即可
本质上,其实就是,分类比较,没有找男生最大或者女生最小,比较简单
3、输出手法倒是一模一样
/*
编程思想:
1、结构体三个,一个max,min,temp,只要两个,跟一个temp
2、更新写成函数吧,这个不关男女了,只关乎两个成绩了
3、最后输出并且做差
4、还有要处理,输出NA的情况,边界值,可能最低男性成绩大于女性成绩吗
输入格式:
1、ID和name不超过10的字符串
*/
#include <iostream>
using namespace std;
struct person {
char id[11], name[11];
char gender;
int grade;
} min_male, max_female, temp;//成绩最低男性,成绩最高女性
void init() { //初试化结构体,最小成绩反而初始最大,最大成绩反而初始为最小
min_male.grade = 100;
max_female.grade = 0;
min_male.gender = 'M';
max_female.gender = 'F';
}
person greater1(person a, person b) {//比较最大成绩函数
if (a.grade > b.grade) return a;
else return b;
}
person less1(person a, person b) { //比较最低成绩函数
if (a.grade < b.grade) return a;
else return b;
}
int main()
{
init();
int n;//多少个人
cin >> n;
for(int i = 0;i < n;i++){
cin >> temp.name >> temp.gender >> temp.id >> temp.grade;
if (temp.gender == 'F') { //女性最大即可吧
max_female = greater1(temp, max_female);
}
else { //男性最小即可吧,我服了,什么脑子咧
min_male = less1(temp, min_male);
}
}
//NA的情况怎么处理,如果没更新就输出NA,有更新就输出
int ans = max_female.grade - min_male.grade;
if (max_female.grade == 0) cout << "Absent" << endl;
else cout << max_female.name << " " << max_female.id<<endl;
if (min_male.grade == 100) cout << "Absent" << endl;
else cout << min_male.name << " " << min_male.id << endl;
if (max_female.grade == 0 || min_male.grade == 100) cout << "NA" << endl;
else cout << ans << endl;
}