题目链接在此。
这是《算法笔记 上机训练实战指南》纸质版(附录二维码中可能有更新内容)中“入门模拟–查找元素”章节的最后一道题,这里有我做撸这一部分题目总结和心得。
题意理解
给出N个同学的信息,输出女生中最高分数获得者、男生中最低分数获得者的信息,以及两者的分数差。如果某一性别学生不存在,则对应获得者信息输出Absent,同时分数差处输出NA。
思路
做到这题,发现这一章节的思路几乎是一致的,可以参看总结与心得,此处不多叙述。
AC代码
#include<stdio.h>
#include<string.h>
int main(){
int N;
scanf("%d",&N);
char Mname[10],Fname[10], temp[10];
char gender;
char FID[11], MID[11], temp_ID[10];
int temp_grade,Fgrade = -1,Mgrade = 101;
int Mflag = 0, Fflag = 0; //男女性别是否都有人的标志
for(int i = 0; i < N; i++){
scanf("%s %c %s %d",&temp,&gender,&temp_ID,&temp_grade);
if(gender == 'F'){
Fflag = 1;
if(temp_grade > Fgrade){
Fgrade = temp_grade; //更新女性的分数
strcpy(Fname,temp); //更新女性的名字
strcpy(FID,temp_ID); //更新女性的学号
}
}
if(gender == 'M'){
Mflag = 1;
if(temp_grade < Mgrade){
Mgrade = temp_grade; //更新男性的分数
strcpy(Mname,temp); //更新男性的名字
strcpy(MID,temp_ID); //更新男性的学号
}
}
}
//打印女生相关信息
if(Fflag){
printf("%s %s\n",Fname,FID);
}else{
printf("Absent\n");
}
//打印男生相关信息
if(Mflag){
printf("%s %s\n",Mname,MID);
}else{
printf("Absent\n");
}
//计算差值并打印
if(!Fflag || !Mflag){
printf("NA\n");
} else{
printf("%d\n",Fgrade-Mgrade);
}
return 0;
}
注:本章节所有题目都可以用结构体来实现,也可以像上面一样定义比较多的变量……自行考量。