关于算法-数据结构:PAT甲级1036-Boys-vs-Girls

30次阅读

共计 1073 个字符,预计需要花费 3 分钟才能阅读完成。

题目粗心:

给出 N 个同学的信息,输入女生中最高分数获得者的信息与男生中最低分数获得者的信息,并输入它们的差。如果不存在女生或者男生,则在对应获得者信息处输入 Absent, 同时分数差处输入 NA。

算法思路:

应用构造体 Student 同学的名字,性别,ID 和分数,girl 保留最高分的女生其分数初始为 -1,boy 保留最低分的男生其分数初始为 101, 对于每一次输出的信息, 如果是男生,就判断以后输出的分数是否比 boy 的分数低,如果是,boy=student, 如果是女生,判断该输出的分数是否比 girl 的分数高,如果是,girl=student. 在最初输入的时候,对于 girl.grade == - 1 的状况,阐明没有相应的女生,boy.grade == 101 阐明没有相应的男生,对于以上 2 种状况之一最初都得输入 NA

留神点:

1、name 和 ID 的数组长度得开到 11 以上。

提交后果:

AC 代码:
#include<cstdio>

using namespace std;

struct Student{char name[20];
    char gender;
    char ID[20];
    int grade;
};

int main(){
    int N;
    scanf("%d",&N);
    Student student;
    Student girl;// 保留最高分的女生 
    girl.grade = -1;
    Student boy;// 保留最低分的男生
    boy.grade = 101; 
    for(int i=0;i<N;++i){scanf("%s %c %s %d",student.name,&student.gender,student.ID,&student.grade);
        if(student.gender=='M'&&boy.grade>student.grade){boy = student;}else if(student.gender=='F'&&girl.grade<student.grade){girl = student;}
    }
    if(girl.grade != -1){printf("%s %s\n",girl.name,girl.ID);
    }else{printf("Absent\n");
    }
    if(boy.grade != 101){printf("%s %s\n",boy.name,boy.ID);
    }else{printf("Absent\n");
    }
    if(girl.grade != -1&&boy.grade != 101){printf("%d",girl.grade-boy.grade);
    }else{printf("NA");
    }
    return 0;
}

正文完
 0