当前位置 博文首页 > programmerphil的博客:PTA刷题Basic篇——1014福尔摩斯的约会—
找出字符串中暗藏的"密码"。我们总共输入四个字符串,前两个比较会得到关于星期和时间的暗语,后两个字符串比较会得到具体分钟。
先声明一个count,表示在第一个字符串和第二个字符串中已找到的相同字符串数目。对前两个字符串遍历比较,找出第一个相同位置且字符相同的大写字母,由于我们只有七个星期,所以大写字符一定要在’A’与’G’之间。这个时候如果找到了,将count+1,表示我们要开始找第二个相同字符串了。然后再找到第二个相同位置的相同字符(数字或大写字母),这里要判断一下查找条件:count==2。
如果是数字则可直接指示时间,如果是大写字母则通过一定的转换可得到时间。
然后对第三个和第四个字符串做相同的遍历比较,找到处在相同位置的相同的英文字母,它们的位置就是时间的具体分钟。例如s&hgsfdk 与d&Hyscvnm,它们的第一个共同字母是s,且处在第四个位置,则具体的分钟就是xx:04.
我们判断星期的时候要通过switch语句来输出。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1, s2, s3, s4;
cin>>s1>>s2>>s3>>s4;
int i, j, count = 0;
for(i = 0; i < s1.length() && i < s2.length(); ++i)
{
if(s1[i] >= 'A' && s1[i] <= 'G' && s1[i] == s2[i] && count == 0)
{
switch(s1[i] - 'A')
{
case 0:cout<<"MON ";break;
case 1:cout<<"TUE ";break;
case 2:cout<<"WED ";break;
case 3:cout<<"THU ";break;
case 4:cout<<"FRI ";break;
case 5:cout<<"SAT ";break;
case 6:cout<<"SUN ";break;
}
count++;
}
else if((s1[i] >= '0' && s1[i] <= '9' && s1[i] == s2[i] && count == 1) ||
(s1[i] >= 'A' && s1[i] <= 'N' && s1[i] == s2[i] && count == 1))
{
if(s1[i] >= '0' && s1[i] <= '9')
cout<<"0"<<s1[i]-'0'<<":";
else if(s1[i] >= 'A' && s1[i] <= 'N')
cout<<s1[i]-'A'+10<<":";
count++;
}
}
for(i = 0; i < s3.length() && i < s4.length(); ++i)
{
if( (s3[i] >= 'a' && s3[i] <= 'z' && s3[i] == s4[i]) ||
(s3[i] >= 'A' && s3[i] <= 'Z' && s3[i] == s4[i]) )
{
if(i < 9)
cout<<"0"<<i<<endl;
else
cout<<i<<endl;
break;
}
}
return 0;
}
答题用时15min
Q14——finish√