大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 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
注:本题不难,但需要读懂题;
第一个信息获取:要求是相同的大写英文字母,且为有效的大写英文字母,即 A~G ;
第二个信息获取:在一个信息获取之后,继续检索字符串,要求是相同的字符,且为数字 0~9 或大写英文字母 A~N ;
第三个信息获取:要求是相同的英文字母,大写或小写。
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1, s2, s3, s4;
int a;
int i = 0, count = 0; // count不同的值 作为 while() 循环跳出的条件
cin >> s1 >> s2 >> s3 >> s4;
while (count != 1)
{
if (s1[i] == s2[i] && s1[i] >= 65 && s1[i] <= 71) //字符相同,且为大写的英文字母 A-G ,此处用到了 ASC码值,也可以用 'A' 形式表示
{
if (count == 0)
{
a = s1[i] - 64; // 解释:A 的 ASC码值为65,减去64,则 A 代表星期一
switch (a)
{
case 1: cout << "MON" << " "; break;
case 2: cout << "TUE" << " "; break;
case 3: cout << "WED" << " "; break;
case 4: cout << "THU" << " "; break;
case 5: cout << "FRI" << " "; break;
case 6: cout << "SAT" << " "; break;
case 7: cout << "SUN" << " "; break;
}
count++;
}
}
i++;
}
while (count != 2)
{
if (s1[i] == s2[i] && ((s1[i] >= 48 && s1[i] <= 57) || (s1[i] >= 65 && s1[i] <= 78))) //是相同的字符,且为数字 0-9 或大写英文字母 A-N
{
if (s1[i] >= 48 && s1[i] <= 57)
cout << "0" << s1[i] - 48 << ":"; //若为个位数字,需要补一个 0 ,满足题意格式要求
else if (s1[i] >= 65 && s1[i] <= 78)
cout << s1[i] - 55 << ":"; // 解释:A 的 ASC码值为65,减去55,则 A 代表 10
count++;
}
i++;
}
i = 0;
while (count != 3)
{
if (s3[i] == s4[i] && ((s3[i] >= 65 && s3[i] <= 90) || (s3[i] >= 97 && s3[i] <= 122))) //相同的英文字母,大写或小写
{
if (i < 10)
{
cout << "0" << i; //若为个位数字,需要补一个 0 ,满足题意格式要求
count++;
}
else
{
cout << i;
count++;
}
}
i++;
}
return 0;
}
在这里补一个 ASC码值表,常用的需要记忆,方便编程;
0-9 :48-57 ; A-Z:65-90 ; a-z:97-122