大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 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
开始自己使用的是string类,直接定义string的数组进行存储,但最后发现网上大多AC都使用char的数组来提高存储效率,还是太年轻了。
一开始还忘记的数组初始化,补充一下:(使用大括号)
string week[7] = {
"MON","TUE","WED","THU","FRI","SAT","SUN"};
自己一开始的想法是每次都去判断,然后在做处理。看了大多网上AC后发现了个解决方法:
#include <iomanip>
//形式1
cout.fill('0');
cout << Week[week] << ' ' << setw(2) << hour << ':' << setw(2) << min;
//形式2
cout<<day<<" "<<setw(2)<<setfill('0')<<HH<<":"<<setw(2)<<setfill('0')<<MM<<endl;
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a,b,c,d;
string week[7] = {
"MON","TUE","WED","THU","FRI","SAT","SUN"};
cin >> a >> b >> c >> d;
int max1,max2;
max1 = (a.length() > b.length() ? a.length() : b.length());
max2 = (c.length() > d.length() ? c.length() : d.length());
for (int i = 0;i < max1 ;++i)
{
if(a[i] - 'A' >= 0 && a[i] - 'G' <= 0)
{
if (a[i] == b[i])
{
cout << week[a[i] - 'A'] << " ";
i++;
for(;i < max1;++i)
{
if(a[i] - '0' >=0 && a[i] - '9' <= 0)
{
if (a[i] == b[i])
{
cout << "0" << (a[i] - '0');
i = max1;
break;
}
}
if(a[i] - 'A' >= 0 && a[i] - 'N' <= 0)
{
if (a[i] == b[i])
{
cout <<(a[i] - 'A') + 10;
i = max1;
break;
}
}
}
}
}
}
cout << ":";
for (int j = 0;j < max2; ++j)
{
if ((c[j] - 'A' >= 0 && c[j]- 'Z' <= 0) || (c[j] - 'a' >= 0 && c[j]- 'z' <= 0))
if (c[j] == d[j])
{
if (j < 10)
cout << "0" << j;
else
cout << j;
break;
}
}
return 0;
}
#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
char input1[61], input2[61], input3[61], input4[61];
int hour, min,week;
char *Week[] = {
"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
cin >> input1 >> input2 >> input3 >> input4;
for (int i = 0,temp='A'; input1[i] != '\0'; i++){
if (input1[i] >= temp &&input1[i] <= 'Z'){
if (input2[i] == input1[i] && temp == 'A'){
week = input1[i] - 'A';
temp = '0';
i++;
}
if (input2[i] == input1[i] && temp == '0'){
if (input1[i] <= '9') hour = input1[i] - '0';
else hour = input1[i] - 'A' + 10;
break;
}
}
}
for (int i = 0; input3[i] != '\0'; i++){
if (input3[i] == input4[i] &&
((input4[i] >= 'a' && input4[i] <= 'z') ||
(input4[i] >= 'A' && input4[i] <= 'Z')))
{
min = i;
break;
}
}
cout.fill('0');
cout << Week[week] << ' ' << setw(2) << hour << ':' << setw(2) << min;
return 0;
}
注:以上思路均来源于网上。文章目的只是为了自己学习总结回顾,欢迎指出错误,相互学习。如有冒犯,请联系删除,谢谢!