Skip to content

Latest commit

 

History

History
84 lines (76 loc) · 2.41 KB

A1061.md

File metadata and controls

84 lines (76 loc) · 2.41 KB

A1061 Dating

1.题意理解

有人找福尔摩斯约会,给了一堆字符串,福尔摩斯太牛逼了,就从字符串里把约会时间decode出来了。

解码规则:

  • 对于前两个字符串s1,s2,取第一个相同位置的相同大写字母代表星期几,例如“D”代表星期四。
  • 在星期几确定之后,下一个相同位置的相同数字或者A——N字母表示0~23h内的小时。
  • 对于后两个字符串,取第一个相同位置的相同英文字母代表分钟

2.思路分析

根据条件,扫描字符串判断即可。

3.参考代码

#include <bits/stdc++.h>
using namespace std;

string d[8] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};

bool captital(char c)
{
    if ('A' <= c && c <= 'Z')
        return true;
    return false;
}
bool letter(char c)
{
    if ('A' <= c && c <= 'Z')
        return true;
    if ('a' <= c && c <= 'z')
        return true;
    return false;
}

int main()
{
    int day = 0, hour = 0, minute = 0;
    bool flag1 = false, flag2 = false, flag3 = false;
    string s1, s2, s3, s4;
    cin >> s1 >> s2 >> s3 >> s4;
    int minlen = min(s1.size(), s2.size());
    for (int i = 0; i < minlen; i++)
    {
        char c1 = s1[i], c2 = s2[i];
        if (c1 == c2)
            if (captital(c1))
            {
                if (!flag1 && c1 <= 'G')
                {
                    day = c1 - 'A';
                    flag1 = true;
                }
                else if (!flag2 && c1 <= 'N')
                {
                    hour = c1 - 'A' + 10;
                    flag2 = true;
                }
            }
            else if ('0' <= c1 && c1 <= '9')
                if (!flag2 && flag1)
                {
                    hour = c1 - '0';
                    flag2 = true;
                }

        if (flag1 && flag2)
            break;
    }
    minlen = min(s3.size(), s4.size());
    for (int i = 0; i < minlen; i++)
        if (s3[i] == s4[i] && letter(s3[i]))
        {
            minute = i;
            break;
        }
    printf("%s %02d:%02d\n", d[day].c_str(), hour, minute);
    // system("pause");
    return 0;
}

注意:

  • 星期只能一到七,小时只能0到23,要做出限定
  • 在“首次相同”的判定中,要注意优先级,即如果星期几没有确定,即使满足小时的条件,也不能给小时赋值。