PAT 乙级 1014 福尔摩斯的约会
1. 题目描述及在线测试位置
1.1 进行字符比较,当满足条件时按要求打印输出
1.2 在线测试位置:PAT 1014 福尔摩斯的约会
2. 具体实现
2.1 基本思路
输入共有四个字符串,分别进行前两个字符串、后两个字符串的比较,需要注意:
(1)前两个字符串 第 1 对相同的大写英文字母代表星期几,他的范围是:A到G(A对应的ASCII码是65)
(2)前两个字符串 第 2 对相同的字符代表一天内第几个钟头,他的范围是:0到9、A到N,分别对应0到23点。如果是0到9,前面需要补字符’0’
(3)后两个字符串 第 1 对相同的英文字母出现的位置 代表具体的分钟(位置从0开始计数)。同样,如果是0到9,前面需要补字符’0’
2.2 AC代码
#include <iostream>
using namespace std;
int Min(int a, int b)
{
return (a < b) ? a : b;
}
int main()
{
string a, b, c, d;
int length=0;
bool flag=true;
string week[7] = { "MON","TUE","WED","THU","FRI","SAT","SUN" };
cin >> a >> b >> c >> d;
length = Min(a.length(), b.length());
for (int i = 0; i < length; i++)
{
if (a[i] == b[i] && flag) //第 1 对相同的 大写英文字母
{
if ( a[i] > 64 && a[i] < 72) //Monday A 65, Sunday G 71
{
cout << week[a[i] - 65]<<" ";
flag = false;
}
}
else if (a[i] == b[i] && !flag) //第 2 对相同的字符,他的范围是:0到9、A到N,分别对应0到23点
{
if (a[i] < 65)
cout << "0" << a[i] << ":"; //CheckPoint: Add '0'
else if (a[i] >= 65 && a[i] <= 78) //CheckPoint: 0-9, A-N
cout << a[i] - 55 << ":";
else
continue;
break;
}
}
length = Min(c.length(), d.length());
for (int i = 0; i < length; i++)
{
if (c[i] == d[i] && c[i] > 64)
{
if (i > 10)
cout << i << endl;
else
cout << "0" << i << endl;
break;
}
}
return 0;
}