PAT 乙级 1014 福尔摩斯的约会


解题思路:这题可把我给弄惨了,研究了很长时间,原因一是第一次我用python写想用字典的get函数去处理字母和数字字符,利用默认值,可是万万没想到,字符串格式化对字符和数字的补0是不一样的,这个错误我找了好久其余的坑都一言我统一说一说
这题第一个要注意的点是范围,大写字母,寻找日期的范围只能是A~G 刚好七个,判断的时候就要注明
第二个点 必须是第一个已经找到,再去找第二个,第二个范围只能是0~9,A-N,判断的时候看好,并且一定是找到就跳出循环,不然后面可能还有满足的
第三点 就很简单找到英文字符 位置输出就行
c语音版本:
#include<stdio.h>
#include<string.h>
int main()
{
char a[4][100];
char day[7][10]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
int i;
for(i=0;i<4;i++)
{
scanf("%s",a[i]);
}
int s1,s2,num,flag=0;
s1=strlen(a[0]);
s2=strlen(a[1]);
num=s1<s2?s1:s2;
for(i=0;i<num;i++)
{
if(a[0][i]==a[1][i]&&flag==0&&a[0][i]-'A'>=0&&a[0][i]-'A'<7)
{
flag=1;
printf("%s ",day[a[0][i]-'A']);
}
else if(flag==1&&a[0][i]==a[1][i])
{
if(a[0][i]>='A'&&a[0][i]<='N')
printf("%02d:",a[0][i]-'A'+10);
else if(a[0][i]>='0'&&a[0][i]<='9')
{
printf("%02d:",a[0][i]-'0');
break;
}
}
}
s1=strlen(a[2]);
s2=strlen(a[3]);
num=s1<s2?s1:s2;
for(i=0;i<num;i++)
{
if(a[2][i]==a[3][i]&&(a[2][i]>='A'&&a[2][i]<='Z'||a[2][i]>='a'&&a[2][i]<='z'))
{
printf("%02d\n",i);
break;
}
}
return 0;
}
python 版本:
s1=input()
s2=input()
s3=input()
s4=input()
day={'A':'MON','B':'TUE','C':'WED','D':'THU','E':'FRI','F':'SAT','G':'SUN'}
hour={'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'I':18,'J':19,'K':20,'L':21,'M':22,'N':23}
first=-1
num1=min(len(s1),len(s2))
for i in range(num1):
if s1[i]==s2[i] and s1[i]>='A' and s1[i]<='G':
print(day[s1[i]],end=' ')
first=i
break
for i in range(first+1,num1):
if s1[i]==s2[i] and (s1[i]>='0' and s1[i]<='9' or s1[i]>='A' and s1[i]<='N'):
if(s1[i]>='0' and s1[i]<='9'):
print('0'+s1[i],end=':')
elif s1[i]>='A' and s1[i]<='N':
print(hour[s1[i]],end=':')
break
num1=min(len(s3),len(s4))
for i in range(num1):
if s3[i]==s4[i] and (s3[i]>='a'and s3[i]<='z'or s3[i]>='A' and s3[i]<='Z'):
print('{:02}'.format(i))