天天看點

PAT_甲級_1061 Dating (20分) (C++)【字元串處理/解碼】

目錄

​​1,題目描述​​

​​ 題目大意​​

​​2,思路​​

​​3,AC代碼​​

​​4,解題過程​​

​​第一搏​​

​​第二搏​​

1,題目描述

PAT_甲級_1061 Dating (20分) (C++)【字元串處理/解碼】

Sample Input:

3485djDkxh4hhGE 
2984akDfkkkkggEdsb 
s&hgsfdk 
d&Hyscvnm      

Sample Output:

THU 14:04      

 題目大意

找出幾個關鍵位置的元素,這些元素對應一些特定的日期與時間;

  1. since thefirst common capital English letter (case sensitive)shared by the first twostrings :前兩個字元串中,首個位置相同且元素相同的大寫字母A-G(代表星期一到星期天);
  2. the secondcommon character :承接上一句,第二個位置相同(在找到符合條件1的元素後的第二個)且元素相同的0-9或A-N(代表0-23);
  3. the English letter shared bythe last two strings:後兩個字元串中,首個位置相同且元素相同的英文字母;

2,思路

了解了題目意思後,就很好解決了。(注意一些小的細節)

3,AC代碼

#include<iostream>
#include<vector>
#include<string.h>
#include<map>
using namespace std;

int main(){
#ifdef ONLINE_JUDGE
#else
    freopen("1.txt", "r", stdin);
#endif // ONLINE_JUDGE

    int d, h, m;//d天 h時 m分
    string day[8] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};

    string s1, s2, s3, s4;
    cin>>s1>>s2>>s3>>s4;

    int flag = 0;
    for(int i = 0; i < s1.length() && i < s2.length(); i++){
        if(flag == 1 && s1[i] == s2[i]){
            if(s1[i] >= '0' && s1[i] <= '9'){
                h = s1[i] - '0';
                break;
            }
            else if(s1[i] >= 'A' && s1[i] <= 'N'){
                h = s1[i] - 'A' + 10;
                break;
            }
        }
        if(flag == 0 && s1[i] == s2[i] && s1[i] >= 'A' && s1[i] <= 'G'){//'A' <= s1[i] <= 'G'
            d = s1[i] - 'A';
            flag = 1;
        }
    }

    for(int i = 0; i < s3.length() && i < s4.length(); i++){
        if(s3[i] == s4[i] && isalpha(s3[i])){
            m = i;
            break;
        }
    }

    printf("%s %02d:%02d", day[d].c_str(), h, m);
    return 0;
}      

4,解題過程

第一搏

(本來以為能很快解決這一題。。。結果深深的陷入了戰場,被一道20分的題【而且完全讀懂了題意】折磨到爆炸)

測試點4:尋找day字段時,第一個大寫字母表示星期幾,範圍是'A'-'G';

PAT_甲級_1061 Dating (20分) (C++)【字元串處理/解碼】

第二搏

注意到:時間是0-23,即0-9和A-N(不是Z);

兩個地方都要break (啊啊啊啊找了一下午,噗噗噗)!!!

繼續閱讀