1. 程式人生 > >PAT-ADVANCED1036——Boys vs Girls

PAT-ADVANCED1036——Boys vs Girls

我的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++解題報告: