大侦探福尔摩斯接到一张奇怪的字条:
我们约会吧!
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm
大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
输入格式:
输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。
输出格式:
在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED 表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。
输入样例:
3485djDkxh4hhGE
2984akDfkkkkggEdsb
s&hgsfdk
d&Hyscvnm
输出样例:
THU 14:04
思路
用gets()获取需要匹配的字符串,然后用一个指针循环对比。
1、第一次匹配时,注意限制条件为大写英文字母,小写不行;
2、第二次匹配时,注意限制条件为0-9或者A-N(必须大写,小写不行);
3、重新获取两字符串再匹配一次,注意限制条件为英文字母,即a-z或者A-A ;
4、根据输出样例,时间输出时,10以内前面带一个0,用%02d控制即可。
AC代码
//这一题注意匹配字母的各种限制要求即可
#include<stdio.h>
#include<string.h>
void day(char n){
char p[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
printf("%s ",p[n-'A']);//注意空格
}
void hour(char n){
char p[24][3]={"00","01","02","03","04","05","06","07","08","09",
"10","11","12","13","14","15","16","17","18","19",
"20","21","22","23"};
if(n>='0'&&n<='9')printf("%s:",p[n-'0']);//注意冒号
if(n>='A'&&n<='N')printf("%s:",p[n-'A'+10]);
}
int main(){
int flag=0;
char s[61],p[61];
gets(s);
gets(p);
for(int i=0;i<strlen(s)<strlen(p)?strlen(s):strlen(p);i++){
if(s[i]==p[i]&&s[i]>='A'&&s[i]<='G'&&flag==0){//注意限制条件,flag控制匹配的次数
day(s[i]);
flag=1;
continue;
}
if(s[i]==p[i]&&((s[i]>='A'&&s[i]<='N')||(s[i]>='0'&&s[i]<='9'))&&flag==1){//注意限制条件,flag控制匹配次数
hour(s[i]);
break;
}
}
gets(s);
gets(p);
for(int i=0;i<strlen(s)<strlen(p)?strlen(s):strlen(p);i++){
if(s[i]==p[i]&&((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))){//注意限制条件
printf("%02d",i);//注意个位数时带0
break;
}
}
return 0;
}
文章描述了一个基于字符串匹配的解码问题,类似于福尔摩斯接收到的加密信息。输入是四对字符串,目标是找出代表星期和时间的编码,并解码成日期时间格式。解码规则涉及字母和数字的特定对应关系,程序需要处理各种限制条件来找到正确答案。
1014 福尔摩斯的约会&spm=1001.2101.3001.5002&articleId=129694690&d=1&t=3&u=7734d7a9b68d47979ca055f55355616c)
221

被折叠的 条评论
为什么被折叠?



