这道题我后来用string来写,结果全是答案错误,然后改回char就能ac
然后经过排查发现是不能写成scanf("%s %c %s %d",temp.name.c_str(),&temp.gen,temp.id.c_str(),&temp.gra);
这样写能过编译,也能过样例,但就是不能过oj系统,不太理解是为什么
将他们直接cin>>的话就能通过了(可能以后在输入是用了string的话还是慎用scanf比较好)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
struct person{
char name[15];
char gen;
char id[15];
int gra;
};
vector<person> male;
vector<person> female;
bool cmpf(person a,person b){
return a.gra>b.gra;
}
bool cmpm(person a, person b){
return a.gra<b.gra;
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
struct person node;
scanf("%s %c %s %d",node.name,&node.gen,node.id,&node.gra);
if(node.gen=='M'){
male.push_back(node);
}else{
female.push_back(node);
}
}
int lenm=male.size();
int lenf=female.size();
sort(male.begin(),male.end(),cmpm);
sort(female.begin(),female.end(),cmpf);
bool flag=true;
if(lenf!=0){
printf("%s %s\n",female[0].name,female[0].id);
}else{
printf("Absent\n");
flag=false;
}
if(lenm!=0){
printf("%s %s\n",male[0].name,male[0].id);
}else{
printf("Absent\n");
flag=false;
}
if(flag==true){
printf("%d",female[0].gra-male[0].gra);
}else{
printf("NA");
}
return 0;
}