题目
题目的意思就是给你四行字符串,让你解密最后的约会时间是多少,第一行和第二行字符串一样的第一个大写字母(A-G)之间,A代表周一依次类推。确定周几后找第二个位置相同的数字字符或大写字母(A-N)输出对应的时间,数字字符‘0’-‘9’表示0点-9点,大写字母‘A’表示10点往后依次类推。找一下第三行第四行相同的英文字母输出对应的位置(从0开始)。
思路
写一个循环第一行英文字母和第二行英文字母,找到相同位置的大写字母(A-G)就输出对应的周几缩写,可以写一个字符串数组来存储周几的缩写,调用一个字符串数组就可以了。可以定义一个变量用来确定大写字母是第几个相同的,不然易混。查找第二个相同的数字字符或大写字母时分两种情况。
第三行第四行直接遍历查找位置相同的英文字母输出位置即可。
测试点1,2,4都是因为查找第一行位置相同的英文字符,查找第一个范围要写‘A’-‘G’;查找第二个范围要写‘A’-‘N’;直接写‘A’-‘Z’导致结果不对。
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s[5],week[8]={"","MON","TUE","WED","THU","FRI","SAT","SUN"};//周几的缩写
for(int i=1;i<=4;i++)
getline(cin,s[i]);
int f=0;
for(int i=0;i<min(s[1].size(),s[2].size());i++)
{
if(f&&s[1][i]==s[2][i]&&(s[1][i]>='A'&&s[1][i]<='N'))//第二个相同的英文字母
{
cout<<s[1][i]-'A'+10<<":";
break;
}
if(f&&s[1][i]==s[2][i]&&(s[1][i]>='0'&&s[1][i]<='9'))//第二个相同的字符
{
printf("%02d:",s[1][i]-'0');
break;
}
if(s[1][i]==s[2][i]&&(s[1][i]>='A'&&s[1][i]<='G'))
{
f++;
if(f==1)//第一个相同字符
{
cout<<week[s[1][i]-'A'+1]<<" ";
}
}
}
for(int i=0;i<min(s[3].size(),s[4].size());i++)
{
if(s[3][i]==s[4][i]&&((s[3][i]>='a'&&s[3][i]<='z'||(s[3][i]>='A'&&s[3][i]<='Z'))))
{
printf("%02d",i);
break;
}
}
return 0;
}