锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

PAT乙级1014 福尔摩斯的约会

时间:2023-03-13 06:30:00 hhg1s固体继电器

1014 约会福尔摩斯
福尔摩斯侦探收到了一张奇怪的纸条:让我们约会吧!

3485djDkxh4hhGE

2984akDfkkkkggEdsb

s&hgsfdk

d&Hyscvnm。

大侦探很快就明白了,字条上奇怪的乱码其实是周四约会的时间 14:04,因为前两个字符串是第一个 1 相同的大写英文字母(大小写有区别)是第一个 4 个字母 D,代表周四;第 2 相同的字符是 E ,那是第 5 英文字母,代表一天中的第一个 14 所以一天 0 点到 23 点由数字 0 到 以及大写字母 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

其实这个问题有点难,我在PTA上面发现通过率不高,只有16.36%,所以写一个小问题

这个问题的难点是有很多边界条件和隐藏条件,所以很容易判断错误。我在代码中写了一个更详细的注释,应该可以通过代码直接窥视豹获得想法。

代码如下:

#include #include #include /* 这个问题是迄今为止最阴险的问题,有很多边界条件和隐含条件。 如果不是靠网上测试案例慢慢测试补充bug,我可能一辈子都找不到我。bug和这些隐藏条件 */  using namespace std; int main(){     vectorcharacter;     vector::iterator it;     char n[3];     ///两个用于存储输入字符string类型      string sentence1,sentence2;     ///这里定义的一个bool其实类型是为了防止‘’N以后的字符作为第一个元素直接压入栈中      bool flag = false;     cin>>sentence1>>sentence2;     for(int i=0;i='A'&&sentence1[i]<='G'&&flag == false){                 character.push_back(sentence1[i]);                 ///读完第一个元素后,就把flag变成1,即现在允许读入第二对字符                  flag = true;             }             //第二对字符必须从‘0’到‘’N这一点需要注意。一开始,我可以把它当作所有的字符,就会出错              else if(flag == true&&sentence1[i]<='N'&&sentence1[i]>='0'){                 character.push_back(sentence1[i]);                 break;             }         }     }     cin>>sentence1>>sentence2;     for(int i=0;i='A'&&sentence1[i]<='z'){             character.push_back(i);             break;         }     }     ///这是把vector中间元素赋予数组,便于后续输出      it = character.begin();     for(int i=0;i<3;i  ){         n[i] = *it;         it  ;     }     ///判断一周switch      switch(n[0]){         case 'A':cout<<"MON ";             break;         case 'B':cout<<"TUE ";             break;         case 'C':cout<<"WED ";             break;         case 'D':cout<<"THU ";             break;         case 'E':cout<<"FRI ";             break;         case 'F':cout<<"SAT ";             break;         case 'G':cout<<"SUN ";             break;         default:             break;     }     ///这里的字符需要分为情况,从‘0’到‘9’A'到'Z需要分开处理的处理方法不同      if(n[1]>='0'&&n[1]<='9')      ///需要改为C语言风格输出,以便更改格式。如果这里不这样输出,就没有前0          printf("d",n[1]-0;     else if(n[1]>='A'&&n[1]<='Z')     ///这里加10是因为需要便宜的操作,A实际上是10          cout<

C语言福尔摩斯约会(OJ题)附测试用例 输出结果 思路解释_java_leading的博客-CSDN博客

附上CSDN上面看到的测试用例,用这个慢慢把握bug找出来的
测试一:
3469djDkxh4hhG0
2974dlDfkkkkgg0dsb
s&hgfdkiggggs
d&Hycvnmzzzzs

输出:
THU 00:12

测试二:
IcCO2eA
IcCO2eB
cCaseC
cCaseD

输出
WED 02:00


测试三:
6985djEkxh4hhGE
2984adEfkkkkggEdsb
s&hgsfdk
d&Hyscvnm

输出:
FRI 14:04


测试四:
3485djGkxh4hhG2
2984akGfkkkkgg2dsb
s&hgsfdk
d&hyscvnm

输出:
SUN 02:02

测试五:
3485djDkxh4hhG82984akDfkkkkggEdsb
2984akDfkkkkgg8da
s&hgsfdk
d&Hyscvnm

输出:
THU 08:04

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章