zoukankan      html  css  js  c++  java
  • B1014/A1061福尔摩斯的约会

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 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

    思路:

     

    步骤1:定义全局变量i,同步遍历a b,找到相同位置的相同字母(符合范围)存入t[0];将i++,继续接着上一次往后遍历a b,找到相同位置的相同字母(符合范围)或者数字(isdigit(a[i]))存入t[1];

    步骤2:定义变量j,同步遍历b c, 找到相同位置的相同英文字母(isalpha(c[j]))并且pos=j;

    步骤3:设置week[7]数组,输出week[t[0] - 'A'];将t[1]转换输出,注意最后格式化输出。

     

     1 #include <iostream>
     2 #include <string>
     3 #include <cctype>
     4 using namespace std;
     5 int main() {
     6     string a, b, c, d;
     7     int t[2], pos;//分别是前两个字母和最后一个位置
     8     cin >> a >> b >> c >> d;
     9     int i = 0, j = 0;
    10     while(i<a.length()&&i<b.length()){
    11         if (a[i] == b[i] && a[i] >= 'A'&&a[i] <= 'G') {
    12             t[0] = a[i];
    13             break;
    14         }
    15         i++;
    16     }
    17     i++;//接着往下找
    18     while (i < a.length() && i < b.length()) {
    19         if (a[i] == b[i] &&(a[i] >= 'A'&&a[i] <= 'N'||isdigit(a[i]))) {
    20             t[1] = a[i];
    21             break;
    22         }
    23         i++;
    24     }
    25     while (j < c.length() && j < d.length()) {
    26         if (c[j] == d[j] &&isalpha(c[j])) {
    27             pos = j;
    28             break;
    29         }
    30         j++;
    31     }
    32     string week[7] = { "MON","TUE","WED","THU","FRI","SAT","SUN" };
    33     cout << week[t[0] - 'A']<<" ";//将字符转化为int型
    34     int hour = isdigit(t[1]) ? t[1] - '0' : t[1] - 'A'+10;//数字和字符需要分情况讨论
    35     printf("%02d:%02d", hour, pos);
    36     return 0;
    37 }

     

    作者:PennyXia
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12296108.html
Copyright © 2011-2022 走看看