题目截图:
思路:
字符串处理。
代码:
1 /* 2 1014. 福尔摩斯的约会 3 */ 4 5 #include <stdio.h> 6 #include <string.h> 7 #include <math.h> 8 #include <stdlib.h> 9 #include <time.h> 10 11 #define maxn 61 12 char s1[maxn], s2[maxn]; // 存储两个字符串 13 // 星期缩写 14 char day[][8] = {"", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"}; 15 16 int main() { 17 scanf("%s %s", s1, s2); 18 int len1=strlen(s1), len2=strlen(s2); 19 int minL = (len1<len2) ? len1 : len2; 20 int d=0, h=0, m=0; // d表示星期,h表示小时,m表示分 21 int i; 22 for(i=0; i<minL; ++i) { 23 if(s1[i]==s2[i] && s1[i]>=‘A‘ && s1[i]<=‘G‘) { 24 d = s1[i]-‘A‘+1; // 第一对相同的大写字母 25 break; 26 } 27 } 28 i++; // 注意要后移一位 29 for(; i<minL; ++i) { // 查找第二对相同的字符 30 if(s1[i]==s2[i]) { 31 if(s1[i]>=‘0‘ && s1[i]<=‘9‘) { // 数字表示0-9 32 h = s1[i]-‘0‘; 33 break; 34 } else if(s1[i]>=‘A‘ && s1[i]<=‘N‘) { // 大写字母表示10-23 35 h = s1[i]-‘A‘+10; 36 break; 37 } 38 } 39 } 40 scanf("%s %s", s1, s2); 41 len1=strlen(s1); len2=strlen(s2); 42 minL = (len1<len2) ? len1 : len2; 43 for(i=0; i<minL; ++i) { // 查找第一对相同的字母 44 if(s1[i]==s2[i] && ((s1[i]>=‘a‘ && s1[i]<=‘z‘) || (s1[i]>=‘A‘ && s1[i]<=‘Z‘))) { 45 m = i; 46 break; 47 } 48 } 49 printf("%s %02d:%02d", day[d], h, m); // 输出,小时和分要输出两位 50 51 return 0; 52 }