【PAT】B1014. 福尔摩斯的约会(题目理解,输出格式)
@(PAT)
链接:https://www.patest.cn/contests/pat-b-practise/1014
思路:
这道题目不难,就是题目的意思非常含糊,这也许是PAT的一个不足之处,另外一个不足之处我觉得是输出的格式调整,也是PAT题目的一个坑点。
这道题目的意思是,前面两个字符串,比较相应位置的char,第1对相同的大写英文字母(大小写有区分)表示星期几,第2对相同的字符(必须是’0’~’9’|| ‘A’~’N’)表示小时;后面两个字符串,比较相应位置的char,第1对相同的英文字母出现的位置表示为分钟。
需要注意的地方:
1. 判断是否是字母除了常规判断外,能够使用头文件下的isalpha函数。
2. 输出小时和分钟如果是个位数,需要在前面补0,使用printf(%02d, a)可以控制。
3. 题目意思要理解清楚再下手,别浪费无谓的时间。
My AC code:
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <sstream>
#include <cctype>
using namespace std;
int main() {
string weekdays[7]= {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
string s1, s2, s3, s4;
// s1= "3485djDkxh4hhGE";
// s2= "2984akDfkkkkggEdsb";
// s3= "s&hgsfdk";
// s4= "d&Hyscvnm";
cin>> s1>> s2>> s3>> s4;
int min_size= s1.size()> s2.size()?s2.size():s1.size();
vector<char> same;
for (int i= 0; i< min_size; i++) {
if (same.size()== 0&& s1[i]== s2[i]&& (s1[i]>= 'A'&& s1[i]<= 'G')) {
same.push_back(s1[i]);
} else if (same.size()!= 0&& s1[i]== s2[i]&& (s1[i]>= 'A'&& s1[i]<= 'N'|| s1[i]>= '0'&& s1[i]<= '9')) {
same.push_back(s1[i]);
}
}
int index= same[0]- 'A';
cout<< weekdays[index]<< " ";
char hour= same[1];
int hh;
if (isalpha(hour)) {
hh= hour- 'A'+ 10;
} else {
hh= hour- '0';
}
int min_size2= s3.size()> s4.size()?s4.size():s3.size();
int mm;
for (int i= 0; i< min_size2; i++) {
if (s3[i]== s4[i]&& isalpha(s3[i])) {
mm= i;
}
}
printf("%02d:%02d\n", hh, mm);
}