zoukankan      html  css  js  c++  java
  • 1014 福尔摩斯的约会

    1014 福尔摩斯的约会 (20分)
     

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 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

        这道题乍一看思路不是很清晰,然后就去写程序了,不出意外,有两个测试点没通过。后来又读了几遍题,发现漏掉了细节,强调一下“大侦探很快就明白了,

    字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2

    对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示);后面两字符串第

    1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟” 这里面隐藏着很多细节,必须要明白下面几点

        1.确定星期,必须是s1和s2中第一对相等的大写字母,大写字母在字母表中的次序代表星期几,'A'~'G'分别对应星期一到星期日
        2.确定小时,在确定星期后,接着在s1和s2中找相第二对相等的字符。注意不需要从头开始,因为题目要求在发现第一对相等的大写字母后,接着向后遍历找相等的字符。找到以后跳出循环,不用再找了。
    因为小时的范围是0~23,所以当找到的相等的字符范围在'0'~'9'之间时,就表示第0到第9小时;超过9小时,就要用24进制来表示小时了,'A'~'N'分别对应10~23,类似于十六进制。
    所以查找的字符范围在'0'~'9'或'A'~'N',查找到以后再转化为对应的小时,这种情况有点麻烦。
        3.确定分钟,在s3和s4中查找第一对相等的字母以后跳出循环,字母可以是大写也可以是小写,因为题目只要求是"第 1 对相同的英文字母",字母的位置就代表分钟,注意字母的位置从0开始。
        4.然后就是要注意输出格式了,小时和分钟小于10的时候要在前面补0。

        下面附上代码上代码

     1 #include<iostream>
     2 #include<ctype.h>
     3 #include<string>
     4 using namespace std;
     5 int main () 
     6 {
     7    string s1,s2,s3,s4;
     8    cin>>s1>>s2>>s3>>s4;
     9    char week,hour;
    10    int len=s1.length()>s2.length()?s2.length():s1.length();//获取s1、s2中长度更小的
    11    for(int i=0,flag=1;i<len;i++)  //获取星期和小时
    12    { 
    13           if(flag==1&&s1[i]==s2[i]&&('A'<=s1[i]&&s1[i]<='G'))
    14           {
    15               week=s1[i]; //第一对相等的字母确定星期
    16               flag++;
    17           }
    18           else if(s1[i]==s2[i]&&(('0'<=s1[i]&&s1[i]<='9')||('A'<=s1[i]&&s1[i]<='N'))&&flag==2)
    19           {
    20               hour=s1[i];  //第二对相等的字符确定小时,并结束循环
    21               break;
    22           }
    23    }
    24    int minute=0;
    25    len=s3.length()>s4.length()?s4.length():s3.length();//获取s3、s4中长度更小的
    26    for(int i=0;i<len;i++)  //确定分钟
    27    { 
    28        if(s3[i]==s4[i]&&isalpha(s3[i])&&isalpha(s4[i]))
    29        {
    30            minute=i;
    31            break;
    32        }
    33    }
    34    switch(week-'A'+1)
    35    { //输出星期
    36       case 1: cout<<"MON ";break;
    37       case 2: cout<<"TUE ";break;
    38       case 3: cout<<"WED ";break;
    39       case 4: cout<<"THU ";break;
    40       case 5: cout<<"FRI ";break;
    41       case 6: cout<<"SAT ";break;
    42       case 7: cout<<"SUN ";break;
    43    }
    44    if('A'<=hour&&hour<='N') //输出小时
    45        cout<<hour-'A'+10<<':';
    46    else if('0'<=hour&&hour<='9')
    47        cout<<'0'<<hour-'0'<<':';
    48    if(minute<10)      //输出分钟
    49        cout<<'0'<<minute;
    50    else
    51        cout<<minute;
    52    return 0;
    53 }

    ac了

  • 相关阅读:
    将ip地址转成二进制数据,除基本输入输出不调用库函数实现
    将ip地址转成二进制数据
    一种合并链表方法实现 严蔚敏 数据结构
    阿里巴巴集团2014年校园招聘系统工程师北京笔试题
    显示模态模态对话框和非模态对话框
    MFC中利用CString和Format成员函数将数字格式化输出
    ObjectARX2012错误1 fatal error C1083: 无法打开包括文件:“arxHeaders.h”: No such file or directory; fatal error C1083: 无法打开包括文件:“map”: No such file or directory
    Metasploit 读书笔记-神器Meterpreter
    解决:kali linux 在vmware 虚拟机中使用bridge模式上网的问题
    metasploit 读书笔记-EXPLOITATION
  • 原文地址:https://www.cnblogs.com/buanxu/p/12812880.html
Copyright © 2011-2022 走看看