当前位置 博文首页 > programmerphil的博客:PTA刷题Basic篇——1014福尔摩斯的约会—

    programmerphil的博客:PTA刷题Basic篇——1014福尔摩斯的约会—

    作者:[db:作者] 时间:2021-09-20 22:51

    在这里插入图片描述
    找出字符串中暗藏的"密码"。我们总共输入四个字符串,前两个比较会得到关于星期和时间的暗语,后两个字符串比较会得到具体分钟。

    题目分析

    先声明一个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√

    cs