题目大意:
给一个12小时制的当地时间,求在目标位置的时间。
Beijing:+8时区,Washington:-5时区,London:0时区,Mocow:+3时区
00:00=12:00AM,12:00=12:00 PM
思路:
先将12小时制的时间换成24小时制的,然后算出两个地区间的时间差将它加到已知时间上就能求得最终时间,如果时间大于24,就是明天,< 0就是昨天,如果<12,就是AM,>=12是PM。
#include<bits/stdc++.h>
using namespace std;
int tim[5] = { 0,8,-5,0,3 };//记录时区
int getini(string loc)
{
int city;
if (loc[0] == 'B')
{
city = 1;
}
if (loc[0] == 'W')
{
city = 2;
}
if (loc[0] == 'L')
{
city = 3;
}
if (loc[0] == 'M')
{
city = 4;
}
return city;
}//获取对应时区
int main()
{
int t;
cin >> t;
for(int i=1;i<=t;i++)
{
int hour;
string time, per, loc, tar;
scanf("%d", &hour);
cin >>time >> per >> loc >> tar;
if (hour == 12)
hour = 0;//12小时制中的12是24小时制里的0
if (per == "PM")
{
hour += 12;
}
int h = -tim[getini(loc)] + tim[getini(tar)];
hour += h;
string day = "Today";
if (h >= 0)
{
if (hour >= 24)
{
day = "Tomorrow";
hour -= 24;
}
}
else
{
if (hour < 0)
{
day = "Yesterday";
hour += 24;
}
}
if (hour < 12)
{
per = "AM";
}
else
{
per = "PM";
}
if (hour == 0)
{
hour = 12;
}//24小时制里的0是12小时制里的12
if (hour > 12)
{
hour -= 12;
}
cout << "Case " << i << ": " << day << " " << hour << time << " " << per << endl;
}
return 0;
}