PAT乙级题解——1014 福尔摩斯的约会 (20分)

在这里插入图片描述
疑惑:
不是很理解题目里的这一段描述,一开始理解成第一对【大写英文字母】和第二对【字符】查找的顺序是各自独立的,以为第二对相同的字符也要从头开始找,卡了半天。看了别人的题解才知道第二个相同的字符要从第一个【大写英文字母】之后开始找

前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示)


#include <iostream>
#include <map>
using namespace std;
int main(){
    int index = 0;
    int arr[2] = {0};
    string day,dh1,dh2,m1,m2;
    map<int,string> map = {{1,"MON"},{2,"TUE"},{3,"WED"},{4,"THU"},{5,"FRI"},{6,"SAT"},{7,"SUN"}};
    cin >> dh1 >> dh2 >> m1 >> m2;
    //星期
    int length = dh1.length() < dh2.length() ? dh1.length() : dh2.length();
    for (int i = 0; i < length; i++) {
        if(dh1[i] == dh2[i] && (dh1[i] >= 'A'&& dh1[i] <= 'G') ){
                arr[0] = dh1[i] - 'A' + 1;
                index = i;
                break;
        }
    }
    //时
    for (int i = index + 1; i < length; i++) {
        if (dh1[i] == dh2[i] && ( (dh1[i] >= 'A' && dh1[i] <= 'N') || isdigit(dh1[i])) ) {
            if (isdigit(dh1[i])) {
                arr[1] = dh1[i] - '0';
                break;
            }else {
                arr[1] = dh1[i] - 'A' + 10;
                break;
            }
        }
    }
    //分
    length = m1.length() < m2.length() ? m1.length() : m2.length();
    for (int i = 0; i < length; i++) {
        if (m1[i] == m2[i] && isalpha(m1[i]) ) {
            index = i;
            break;
        }
    }
    //输出
    cout << map[arr[0]] << " ";
    printf("%02d:%02d",arr[1],index);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值