PAT A1061

题意

输入4个字符串,输出的日期为第一个字符串和第二个字符串中第一个相等的大写字母,输出的小时为第一个字符串和第二个字符串中第二个相等的大写字母,输出的分钟为第三个字符串和第四个字符串中第一个相等的英文字母下标。

思路

  • 输出day:因为要根据大写字母输出相应的日期,所以创建一个日期Hash[]映射方便输出。将字符串1和字符串2从下标0开始两两比较,直到找到了第一个相同的大写字母。
  • 输出Hour:从上次比较结束后的下标+1开始两两枚举,直到又找到一个相同的大写字母
  • 输出Min:两两比较字符串3和字符串4,直到找到一个相同的英文字母(大小写均可),然后输出下标。

参考代码:

#include <bits/stdc++.h>
using namespace std;
char Hash[7][5] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
char a[4][70];



bool isletter(char a) {     //判断是不是英文字母 
    if(a >= 'a' && a <= 'z' || a >= 'A' && a <= 'Z') return true;
    return false;   
}

int main(void){
    scanf("%s%s%s%s",a[0],a[1],a[2],a[3]);
    int len1 = strlen(a[0]);
    int len2 = strlen(a[1]);
    int len3 = strlen(a[2]);
    int len4 = strlen(a[3]);
    
    //输出day
    int i;
    for(i = 0;i < len1 && i < len2;i++) {
        if(a[0][i] == a[1][i] && isupper(a[0][i])) {            //如果处在相同位置并且是大写字母 
            char s = a[0][i];
            printf("%s ",Hash[s-'A']);
            break;
        }
    } 
    
    //输出hour
    for(i++;i < len1 && i < len2;i++)           //注意此处for的初始化操作为i自增,因为不比较相等的元素
    {
        if(a[0][i] == a[1][i]) {
            char s = a[0][i];
            if(s >= '0' && s <= '9')         
                printf("%02d:",s-'0');
            else if(s >= 'A' && s <= 'N') 
                printf("%02d:",s-'A'+10);
            break;
        }   
    } 
    
    //输出day
    for(int i = 0;i < len3 && i < len4;i++) {
        if(a[2][i] == a[3][i] && isletter(a[2][i])) {
            printf("%02d",i);
            break;
        }
    } 
    return 0;
}

调试了半个小时,第四个测试点始终过不去,暂时不解决了,有大神能指点下么?

猜你喜欢

转载自www.cnblogs.com/Western-Trail/p/10326745.html
今日推荐