#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Student{
char name[
100];
char id[
100];
char gender[
1];
int grade;
};
bool cmp1(Student st1, Student st2) {
return st1.grade <
st2.grade;
}
bool cmp2(Student st1, Student st2) {
return st1.grade >
st2.grade;
}
int main () {
vector<Student>vec[
2];
int N;
cin >>
N;
Student stu;
for(
int i =
0; i < N; i++
) {
cin >> stu.name >> stu.gender >> stu.id >>
stu.grade;
if(stu.gender[
0] ==
'F') {
vec[0].push_back(stu);
}else {
vec[1].push_back(stu);
}
}
sort(vec[1].begin(),vec[
1].end(),cmp1);
sort(vec[0].begin(),vec[
0].end(),cmp2);
/*
if(vec[0].size() == 0) {
cout << "Absent" << endl;
}else {
cout << vec[0][0].name << " " << vec[0][0].id<<endl;
}
if(vec[1].size() == 0) {
cout << "Absent" << endl;
}else {
cout << vec[1][0].name << " " << vec[1][0].id<<endl;
}
if(vec[1].size() == 0 || vec[0].size() == 0) cout << "NA" << endl;
else cout << abs(vec[1][0].grade - vec[0][0].grade);
*/
if(vec[
0].size() ==
0 || vec[
1].size() ==
0) {
if(vec[
0].size() !=
0) {
cout << vec[
0][
0].name <<
" " << vec[
0][
0].id<<
endl;
cout <<
"Absent" << endl <<
"NA" <<
endl;
}else if(vec[
1].size() !=
0) {
cout <<
"Absent" <<
endl ;
cout << vec[
1][
0].name <<
" " << vec[
1][
0].id <<
endl;
cout <<
"NA" <<
endl;
}else {
cout <<
"Absent" <<
endl ;
cout <<
"Absent" <<
endl ;
cout <<
"NA" <<
endl;
}
}else {
cout << vec[
0][
0].name <<
" " << vec[
0][
0].id<<
endl;
cout << vec[
1][
0].name <<
" " << vec[
1][
0].id <<
endl;
cout << abs(vec[
0][
0].grade - vec[
1][
0].grade) <<
endl;
}
}
有两个小问题,第一个最初的时候数组开小了,导致一直不能通过。 第二个是在输出的时候,总想着做好整体判断,这也导致代码逻辑很复杂。因此如果有多行输出的话,可以考虑每一行进行单独判断,就像注释代码一样,这样会简单很多。
转载于:https://www.cnblogs.com/dcklm/p/10348546.html