题意
让大家来扮演福尔摩斯,又让大家获得约会的机会。
不得不说这个题的福利很好啊(大雾)。
题目的话是给四行字符串。
然后先对前两行字符串中的字符依次进行匹配。
当遇到第1对相同且满足以下条件的字符对时,则表示为星期几。
- 大写字母
- 既然是表示星期几,取值范围则为 (A,A+7) ,即 (A,G)
然后从当前位置开始继续往后再对前两行字符串进行匹配操作。
当遇到第2对相同且满足以下条件的字符对时,则表示为第几小时。
- 大写字母和数字
- 取值范围则为
(0,9)
,表示
0
点 到
9 点
和 (A,A+13) ,即 (A,N) ,表示 10 点 到 23 点
最后则对后两行字符串中的字符依次进行匹配。
当遇到第1对相同且为英文字母的字符对时,
其位置,当前字符的数组下标,即为第几分钟。
分析
题意中已经详细分析了。
注意一下输出时的格式就没问题了。
代码
#include <cstdio>
char a[65], b[65], c[65], d[65];
char *week[] = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
int main()
{
while( ~scanf( "%s%s%s%s", a, b, c, d ) ){
int f = 1; // f 表示现在找的是第几个相同的字符 1 为第一个 0 为第二个
for( int i = 0; a[i] != '\0' && b[i] != '\0'; i++ ){
if( a[i] == b[i] ){
if( f ){
if( a[i] >= 'A' && a[i] <= 'G' ){
printf( "%s ", week[a[i] - 'A'] );
f = 0;
}
}
else{
if( ( a[i] >= 'A' && a[i] <= 'N' ) || ( a[i] >= '0' && a[i] <= '9' ) ){
int num;
if( a[i] >= '0' && a[i] <= '9' ){
num = a[i] - '0';
putchar( '0' );
}
else num = a[i] - 'A' + 10;
printf( "%d:", num );
break;
}
}
}
}
for( int i = 0; c[i] != '\0' && d[i] != '\0'; i++ ){
if( c[i] == d[i] ){
if( ( c[i] >= 'A' && c[i] <= 'Z' ) || ( c[i] >= 'a' && c[i] <= 'z' ) ){
printf( "%02d\n", i );
break;
}
}
}
}
return 0;
}
小结
非常简单的匹配问题。