题目:福尔摩斯的约会
大侦探福尔摩斯接到一张奇怪的字条:
我们约会吧!
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、数据2、数据3,并对其进行输出,输出数据1的时候采用switch语句来进行判断输出何种语句,输出数据2的时候需要进行判断是位于0~9还是A~N的情况再进行输出,输出数据3的时候需要判断是<10还是>10,如果<10就需要对高位进行补位的操作。
注意:
①输出部分1:其输出字符是位于A~N;
②输出部分2:其输出字符是位于0~9或A~N;
③输出的时候如果输出的时钟或分钟是小于10的,就必须在高位上补0,例如:8:2要写成08:02 。
④输出的数据其类型必须是char型(输出数据1和数据2)
#include<iostream>
#include<string>
using namespace std;
//判断字符串对应位置是否相同
bool is_string_same(char a,char b)
{
if(a != b)
{
return false;
}
else
{
return true;
}
}
int main()
{
string str1,str2,str3,str4; //用于存放字符串
cin>>str1;
cin>>str2;
cin>>str3;
cin>>str4;
char answer1=0; //用于记录数据1
char answer2=0; //用于记录数据2
int answer3=0; //用于记录数据3
int num=0; //用于记录str1与str2相同的字符个数
//找数据1、2
for(int i=0;;i++)
{
if(str1[i] == NULL || str2[i] == NULL) //当遍历完整个字符串依旧没有找到对应的字符就需要退出
{
return 0;
}
if(is_string_same(str1[i],str2[i]) && str1[i] >= 'A' && str1[i] <= 'N') //找到字符串1、2中第一个相同的字符,且这个字符是A~G
{
num++; //记录此时是第几次相同
if(num == 1) //第一次相同
{
answer1 = str1[i];
}
else //第二次相同
{
if(is_string_same(str1[i],str2[i]) && ((str1[i] >= 'A' && str1[i] <= 'N') || (str1[i] >= '0' && str1[i] <= '9'))) //找到字符串1、2中第二个相同的字符,且这个字符是A~N或数字0~9)
{
answer2 = str1[i];
break; //找到两次相同的字符,退出循环
}
}
}
}
//找数据3
for(int i=0;;i++)
{
if(str3[i] == NULL || str4[i] == NULL) //当遍历完整个字符串依旧没有找到对应的字符就需要退出
{
return 0;
}
if(is_string_same(str3[i],str4[i]) && ((str3[i] >= 'a' && str3[i] <= 'z') || (str3[i] >= 'A' && str3[i] <= 'Z'))) //找到字符串3、4中字符相同的位置,并且这个字符必须是小写字母
{
answer3 = i;
break;
}
}
//输出1
switch((int)(answer1-65) % 7)
{
case 0:cout<<"MON"<<" ";break;
case 1:cout<<"TUE"<<" ";break;
case 2:cout<<"WED"<<" ";break;
case 3:cout<<"THU"<<" ";break;
case 4:cout<<"FRI"<<" ";break;
case 5:cout<<"SAT"<<" ";break;
case 6:cout<<"SUN"<<" ";break;
}
//输出2
if(answer2 - 48 < 10) //表示B是0~9,需要输出0_
{
cout<<"0"<<answer2-48<<":";
}
else //表示B是A~N中的数
{
cout<<answer2-55<<":";
}
//输出3
if(answer3 < 10) //如果<10就要补0
{
cout<<"0"<<answer3;
}
else
{
cout<<answer3;
}
system("pause");
return 0;
}
标签:输出,PAT,测试点,str1,char,字符串,&&,1014,数据
From: https://blog.csdn.net/weixin_66512566/article/details/140726189