版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/83934358
我的PAT-ADVANCED代码仓:https://github.com/617076674/PAT-ADVANCED
原题链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805453203030016
题目描述:
题目翻译:
1036 男孩 VS 女孩
这一次,你需要求出所有男生中的最低分数和所有女生中的最高分数之间的差。
输入格式:
每个输入文件包含一个测试用例。每个测试用例包含一个正整数N,后跟N行学生信息。每行包含一个学生的姓名,性别,身份和成绩,用空格分隔,其中姓名和ID是不超过10个字符的字符串,没有空格,性别是F(女性)或M(男性),题目保证所有成绩都是不同的。
输出格式:
对于每个测试用例,输出3行。 第一行给出了最高分数的女学生的姓名和ID,第二行给出了最低分数的男学生的姓名和ID。 第三行给出了分数差,女生的最高分减去男生的最低分。如果缺少一种这样的学生,则在相应的行中输出Absent,而在第三行输出NA。
输入样例1:
3
Joe M Math990112 89
Mike M CS991301 100
Mary F EE990830 95
输出样例1:
Mary EE990830
Joe Math990112
6
输入样例2:
1
Jean M AA980920 60
输出样例2:
Absent
Jean AA980920
NA
知识点:字符串
思路:按题述编程即可
时间复杂度是O(N)。空间复杂度是O(1)。
C++代码:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int N;
scanf("%d", &N);
char maxGirlName[11], maxGirlID[11], minBoyName[11], minBoyID[11];
int maxGirlScore = -1;
int minBoyScore = 101;
char tempName[11], c, tempID[11];
int score;
for(int i = 0; i < N; i++){
scanf("%s %c %s %d", tempName, &c, tempID, &score);
if(c == 'F' && score > maxGirlScore){
strcpy(maxGirlName, tempName);
strcpy(maxGirlID, tempID);
maxGirlScore = score;
}else if(c == 'M' && score < minBoyScore){
strcpy(minBoyName, tempName);
strcpy(minBoyID, tempID);
minBoyScore = score;
}
}
if(maxGirlScore != -1 && minBoyScore != 101){
printf("%s %s\n", maxGirlName, maxGirlID);
printf("%s %s\n", minBoyName, minBoyID);
printf("%d\n", maxGirlScore - minBoyScore);
}else if(maxGirlScore == -1 && minBoyScore == 101){
printf("Absent\n");
printf("Absent\n");
printf("NA\n");
}else if(maxGirlScore != -1 && minBoyScore == 101){
printf("%s %s\n", maxGirlName, maxGirlID);
printf("Absent\n");
printf("NA\n");
}else{
printf("Absent\n");
printf("%s %s\n", minBoyName, minBoyID);
printf("NA\n");
}
return 0;
}
C++解题报告: