福尔摩斯的约会 (20)

 

为什么csdn做笔记如此难用= =。要不以后还是有道云吧

 

1.确当周几的字母是A~G,所以遍历字符串的时候,第一个和第二个字符串的相同位置字母不仅一样,还要是A~G内的
2.确定小时的字符是在满足1条件的字母的位置(因为两个字符串第一个相同的字符是8,但题目的陈述的是E,这是隐含信息)后面查找,范围0~9和A~N以内,字母是看它在字母表中的位置,A的位置为1。
3.两个字符串中相同位置具有相同字母的对数不止两对,所以在确定小时候一定要跳出循环,不然后面还可能又有一对满足2的,这就错误了,有一个测试点的陷阱就在这里。
4.最后两个字符串中确当分钟的是英文字母A~Z 以及a~z,在字符串的相对位置(从零开始计数)。
5.小时或者分钟不满足两位的要记得补零。

又wa了,找不到是怎么错的!结果发现是return 0;写错位置了= =。

改掉,还是有问题,多了一行04,原来是少加了一个break。


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

对应输出应该为:

SUN 02:02

你的输出为:

SUN 02:02
04

真的 无法忍受不能高亮这个问题 ,那就截图吧。。。。

 

 错解:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<map>
#include<vector>
#include<string>
using namespace std;
#define N 60

int main()
{
   string s1,s2,s3,s4;
    cin>>s1>>s2>>s3>>s4;
    int mark=0;
    for(int i=0;i<s1.size()&&i<s2.size();i++)
    {
        if(s1[i]==s2[i]&&(s1[i]>='A'&&s1[i]<='G'))
        {
            switch(s1[i])
            {
                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;

            }
            mark=i;//记录位置
            break;
        }
    }

    for(int j=mark+1;j<s1.size()&&j<s2.size();j++)
    {
        if(s1[j]==s2[j]&&((s1[j]>='A'&&s1[j]<='N')||(s1[j]>='0'&&s1[j]<='9')))
        {
            if(s1[j]>='A'&&s1[j]<='N')
            {
                int x=s1[j]-'A'+10;//简单转换成数字
                cout<<x/10<<x%10<<":";
            }
            else
            {
                int y=s1[j]-'0';//注意此处转换,字母到十进制数
                cout<<y/10<<y%10<<":";
            }
            break;
        }
    }
    for(int k=0;k<s3.size()&&k<s4.size();k++)
    {

                       if(s3[k]==s4[k]&&((s3[k]>='A'&&s3[k]<='Z')||(s3[k]>='a'&&s3[k]<='z'))){
                 cout<<(k)/10<<(k)%10<<endl;

    }
    return 0;
}
}

来看看其他做法:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值