牛客网 PAT 乙级 1004 福尔摩斯的约会 (20)

题目链接:https://www.nowcoder.com/pat/6/problem/4040


题目要点:

①四个字符串,两两比较,依照要求比较字符。我一开始想用字符串数组,还想用函数把每个条件写出来,用指针传参数,奈何才疏学浅,终不得。挠首顿足间,幡然醒悟,无自觉中陷入迷惘,自讨苦吃。(???我到底在说些什么……)

②确定星期:第一个字符串和第二的字符串比较,比较相同位置上的两个“大写字母”是否相同,所以这里的if条件有两个:相等且大写字母。只需要找到第一对就行,所以要用break即时跳出循环。星期吗,用switch语句,无非多复制几行printf。

③确定钟头:首先要接着上面那个继续寻找相同字符,所以i=i+1。if的判断语句有些复杂,要相等且在数字0-9之间或在a-z、A-Z之间。输出的时候有变化,当字符是0-9的时候要输出两位数,要手动填一个零,而且因为是字符串,要是直接输出%d得到的是ASCII码,要减去48进行调整。当相等的是字母时,同理,也要把字符-55变成时间。别忘了break跳出循环。

④确定分钟:与上个类似,而且要特别注意如果分钟是个位数,要手动填个零,变成两位数。


PS:好吧,我还真不知道有%02d这种表达。。。

PPS:为什么看其他人的代码有一种迷之膜拜感,看的特别辛苦。。。


下面是完整代码:

#include
#include
#include
 
int main() {
     char str[ 4 ][ 60 ];
     
     int i;
     for (i =  0 ; i <  4 ; i++) {
         gets(str[i]);
     }
 
     for (i =  0 ; i <  60 ; i++) {
         if ((str[ 0 ][i] == str[ 1 ][i]) && (str[ 0 ][i] <=  'Z' &&str[ 0 ][i] >=  'A' )) {
             switch (str[ 0 ][i]) {
             case 'A' : printf( "MON" );  break ;
             case 'B' :printf( "TUE" );  break ;
             case 'C' :printf( "WEN" );  break ;
             case 'D' :printf( "THU" );  break ;
             case 'E' :printf( "FRI" );  break ;
             case 'F' :printf( "SAT" );  break ;
             case 'G' :printf( "SUN" );  break ;
             }
             break ;
         }
     }
 
     for (i = i +  1 ; i <  60 ; i++) {
         if ((str[ 0 ][i] == str[ 1 ][i]) && ((str[ 0 ][i] <=  '9' && str[ 0 ][i] >=  '0' ) || (str[ 0 ][i] >=  'A' &&str[ 0 ][i] <=  'Z' ))) {
             if (str[ 0 ][i] <=  '9' && str[ 0 ][i] >=  '0' )
                 printf( " 0%d:" , str[ 0 ][i]- 48 );
             else
             printf( " %d:" , ( int )str[ 0 ][i]- 55 );
             break ;
         }
         
     }
 
     for (i =  0 ; i <  60 ; i++) {
         if ((str[ 2 ][i] == str[ 3 ][i]) && ((str[ 2 ][i] <=  'z' && str[ 2 ][i] >=  'a' ) || (str[ 2 ][i] >=  'A' &&str[ 2 ][i] <=  'Z' ))) {
             if (i <  10 )
                 printf( "0%d" , i);
             else
                 printf( "%d" , i);
             break ;
         }
     }
 
 
     return 0 ;
}


(~ ̄▽ ̄)~

测试点

测试点 结果 用时(ms) 内存(KB)
1 答案正确 2 384
2 答案正确 3 424
3 答案正确 2 376
4 答案正确 3 384
5 答案正确 3 384
6 答案正确 3 424
7 答案正确 3 384

你可能感兴趣的:(牛客网 PAT 乙级 1004 福尔摩斯的约会 (20))