PAT乙级1014 福尔摩斯的约会

题目:

大侦探福尔摩斯接到一张奇怪的字条:

我们约会吧!

3485djDkxh4hhGE

2984akDfkkkkggEdsb

s&hgsfdk

d&Hyscvnm

大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 AN 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

输入格式:

输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。

输出格式:

在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。

输入样例:

3485djDkxh4hhGE 
2984akDfkkkkggEdsb 
s&hgsfdk 
d&Hyscvnm

输出样例:

THU 14:04

分析:

题目不是很难,但坑较多。

前面两字符串:

先查找第一对相同的大写英文字母,代表从星期一MON到星期日SUN,因此第一对相同的大写英文字母范围是'A'~'G'。

然后再查找相同的字符,用数字0~9,大写字母A~N表示0~23点,即第二对相同的字符范围是'0'~'9'和'A'~'N'。

后面两个字符串:

第一对相同的英文字母,所处字符串的下标代表分钟,字母的范围是'a'~'z'和'A'~'Z'。

注意查找符合上述条件的字符对时,查找到第一对之后不要重复查找!!

输出格式:

小时和分钟,需要判断是否大于10,不大于10的话需要补0输出。(会影响1、2、4测试点)

代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
    string a1, a2;
    string b1, b2;
    cin >> a1 >> a2 >> b1 >> b2;
    int l1 = min<int>(a1.length(), a2.length());
    int l2 = min<int>(b1.length(), b2.length());
    int t1 = 0;
    string day; int hour; int minute;
    for(int i = 0; i < l1; i++)
    {
        char c1 = a1[i];
        char c2 = a2[i];
        if(t1 == 0 && c1 == c2 && c1 >= 'A' && c1 <= 'G')
        {
            switch(c1)
            {
                case 'A': day = "MON";break;
                case 'B': day = "TUE";break;
                case 'C': day = "WED";break;
                case 'D': day = "THU";break;
                case 'E': day = "FRI";break;
                case 'F': day = "SAT";break;
                case 'G': day = "SUN";break;
            }
            t1 = 1; continue;
        }
        else if(t1 == 1 && c1 == c2)
        {
            if(c1 >= '0' && c1 <= '9')
            {
                hour = c1 - '0'; break;                
            }
            else if(c1 >= 'A' && c1 <= 'N')
            {
                hour = c1 - 'A' + 10; break;                
            }
        }
    }
    for(int j = 0; j < l2; j++)
    {
        char d1 = b1[j];
        char d2 = b2[j];
        if((d1 >= 'a' && d1 <='z') || (d1 >= 'A' && d1 <='Z'))
        {
            if(d1 == d2)
            {
                minute = j; break;                
            }
        }
    }
    cout << day << " ";
    if(hour < 10)
        cout << "0" << hour << ":";
    else
        cout << hour << ":";
    if(minute < 10) 
        cout << "0" << minute;
    else 
        cout << minute;
    return 0;
}

#刷题记录#
PAT乙级 文章被收录于专栏

PAT乙级(Basic)刷题记录

全部评论
🤣福尔摩斯没收到这张字条就不用解密了
点赞 回复 分享
发布于 2023-02-10 22:12 湖北
牛客的隐藏大佬真多
点赞 回复 分享
发布于 2023-02-10 22:36 山东

相关推荐

AI牛可乐:哇,听起来你遇到了什么挑战呢!🐮牛可乐在这里,虽然小,但是勇敢又聪明,想听听你的具体情况哦!如果你愿意的话,可以点击我的头像给我私信,我们可以一起想办法应对挑战,好不好呀?🌟🎉
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务