题目链接:点击打开链接
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 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我的C++程序:
#include<iostream>
#include<string>
#include<map>
#include<iomanip>
using namespace std;
int main()
{
int i = 0;
string s1, s2, s3, s4;
char week_sign,hour_sign;//week_sign第一对相同的大写字母代表星期,hour_sign代表小时的字符
int minute=0;//分钟
map<char, string>week;//星期几
map<char,int>hour;//小时
week['A'] = "MON";week['B'] = "TUE";week['C'] = "WED";week['D'] = "THU";
week['E'] = "FRI";week['F'] = "SAT";week['G'] = "SUN";//从星期一到星期日
hour['A'] = 10;hour['B'] = 11;hour['C'] = 12;hour['D'] = 13;hour['E'] = 14;
hour['F'] = 15;hour['G'] = 16;hour['H'] = 17;hour['I'] = 18;hour['J'] = 19;
hour['K'] = 20;hour['L'] =21;hour['M'] =22;hour['N'] =23;//从10小时到23小时
cin >> s1 >> s2 >> s3 >> s4;//接受四个字符串
int length = (s1.size() > s2.size() )? s2.size() : s1.size();//length是s1,s2里最短的字符长度
for (i=0;i <length;i++)//得到代表星期几的大写字符
{
if (s1[i]>= 'A'&&s1[i]<= 'G'&&s1[i]==s2[i])//字符必须是大写字母
{
week_sign= s1[i];
s1[i]= '@';
break;//找到第一个就跳出循环
}
}
for (;i < length;i++)//计算代表小时的字符
{
if (s1[i] == s2[i])
{
if (s1[i] >= '0'&&s1[i] <= '9')//'0'<=小时字符<='9'
{
hour_sign = s1[i];
break;
}
if(s1[i] >= 'A'&&s1[i] <= 'N')//大写字母A-N表示10-23小时
{
hour_sign = s1[i];
break;
}
}
}
length= (s3.size() > s4.size()) ? s4.size() : s3.size();//length是s3,s4里最短的字符长度
for (i=0;i <length;i++)//计算分钟
{
if (s3[i] >= 'A'&&s3[i] <= 'z'&&s3[i] == s4[i])//分钟字符必须为为大写或小写字母,不是数字
{
minute =i;
break;
}
}
cout << week[week_sign] <<' ';//输出星期
if (hour_sign >= '0'&&hour_sign <= '9')
cout << 0 << hour_sign;
else
cout << hour[hour_sign];//输出小时
cout<<':';
cout << setw(2) << setfill('0') << minute;//输出两位的分钟,不足用0补满
//system("pause");
return 0;
}