题目链接
思路如下
把时间转化为 24小时制下进行考虑,首先我们要明白(在24小时制下):12 点表示是下午PM ,而 24点表示的是明天的 0点(12小时制下),这两个地方需要特殊考虑
题解如下
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
map<string,int> mp;
mp["Beijing"] = 8;
mp["Washington"] = -5;
mp["London"] = 0;
mp["Moscow"] = 3;
int t;
cin>>t;
int case_ = 1;
while(t --)
{
int h,m;
char a;
string str;
cin>>h>>a>>m>>str;
string st1,st2;
cin>>st1>>st2;
//下边两个if条件 对 h == 12 时进行特殊处理,
//如果 str == "AM" 则 h == 12 对应的24时制下的时间 为 0点(凌晨 0 点)
//如果 str == "PM" 则 h == 12 对应的24时制下的时间 为 12点 (中午 12 点)
if(h == 12)
h = 0;
if (str == "PM")
h += 12;
h -= mp[st1];
h += mp[st2];
string day = "Today";
if(h < 0)
day = "Yesterday";
else if(h >= 24)
day = "Tomorrow";
h += 24;
h %= 24;
str = "AM";
if(h >= 12)
{
str = "PM";
}
if(h == 0)
h = 12;
else if(h > 12)
h -= 12;
printf("Case %d: ",case_++);
printf("%s %d:%02d %s\n", day.c_str(), h, m, str.c_str());
}
return 0;
}