浙江大学PAT_乙级_1014. 福尔摩斯的约会 (20)

题目链接:点击打开链接

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值