【PAT甲級 約會】1061 Dating (20 分) C++ 全部AC

題目

這個題要注意的細節很多。因爲一個星期有七天,一天有24小時,所以要注意字母範圍這個隱藏條件,不符合條件的字母要跳過。

還要注意:第二次查找,要接着第一次找到的位置開始找。這個有點坑,題目裏沒說明白,只說是第二個相同的字符,我一開始是從頭找的,所以這個點卡了很久。

所以,做題還是要先讀懂題再開始敲,不然的話,用錯誤的理解敲出來再一點一點改太浪費時間了。
在這裏插入圖片描述
自己用的測試用例,用於測試第二次查找的開始要接着第一次的結束位置繼續找這個坑

s99ssssssssccccAE432543
s99ssssssssccccAE123123
s&hgifdknn
d&Hyscvnmnm

答案:MON 14:09

題解 C++

#include<iostream>
#include<string>
using namespace std;
//這個題要注意的細節很多。因爲一個星期有七天,一天有24小時,所以要注意字母範圍這個隱藏條件,不符合條件的字母要跳過。
int main() {
	string str1, str2, str3, str4;
	cin >> str1 >> str2 >> str3 >> str4;

	int weekday = -1;
	int hour = -1;
	//在前兩個字符串中,找第一個相同的大寫字母(由於一週七天的約束,應該在A-G範圍內)
	int temp = -1;
	int len = str1.length() < str2.length() ? str1.length() : str2.length();
	for (int i = 0; i < len; i++) {
		if (str1[i] == str2[i] && str1[i] >= 'A'&&str1[i] <= 'G') {
			weekday = str1[i] - 'A';
			temp = i;
			break;
		}
	}
	//接着上次找到的位置繼續找,找到第一個相同的數字(0-9)或大寫字母(A-N)
	for (int i = temp + 1; i < len; i++) {
		if (str1[i] == str2[i]) {
			if (str1[i] >= '0'&&str1[i] <= '9') {//是數字
				hour = str1[i] - '0';
				break;
			}
			else if (str1[i] >= 'A'&&str1[i] <= 'N') {//是大寫字母
				hour = 10 + (str1[i] - 'A');
				break;
			}
		}
	}

	//後兩個字符串中,找到第一個相同字母的位置
	int minute = -1;
	len = str3.length() < str4.length() ? str3.length() : str4.length();
	for (int i = 0; i < len; i++) {
		if (str3[i] == str4[i]) {
			if ((str3[i] >= 'A'&&str3[i] <= 'Z') || (str3[i] >= 'a'&&str3[i] <= 'z')) {
				minute = i;
				break;
			}
		}
	}

	string weekdays[] = { "MON","TUE","WED","THU","FRI","SAT","SUN" };
	cout << weekdays[weekday] << " ";
	printf("%02d:%02d", hour, minute);
	system("pause");
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章