1.連接:http://poj.grids.cn/practice/2966/ios
2.題目:測試
- 總時間限制:
- 1000ms
- 內存限制:
- 65536kB
- 描述
- 直到19世紀,時間校準是一個純粹的地方現象。每個村莊當太陽升到最高點的時候把他們的時鐘調到中午12點。一個鐘錶製造商人家或者村裏主 表的時間被認爲是官方時間,市民們把自家的鐘表和這個時間對齊。每週一些熱心的市民會帶着時間標準的表,遊走大街小巷爲其餘市民對錶。在城市之間旅遊的 話,在到達新地方的時候須要把懷錶校準。可是,當鐵路投入使用以後,愈來愈多的人頻繁地長距離地往來,時間變得愈來愈重要。在鐵路的早期,時刻表很是讓人 迷惑,每個所謂的停靠時間都是基於停靠地點的當地時間。時間的標準化對於鐵路的高效運營變得很是重要。
在1878年,加拿大人Sir Sanford Fleming 提議使用一個全球的時區(這個建議被採納,並衍生了今天咱們所使用的全球時區的概念),他建議把世界分紅24個時區,每個跨越15度經線(由於地球的經 度360度,劃分紅24塊後,一塊爲15度)。Sir Sanford Fleming的方法解決了一個全球性的時間混亂的問題。
美國鐵路公司 於1883年11月18日使用了Fleming 提議的時間方式。1884年一個國際子午線會議在華盛頓召開,他的目的是選擇一個合適的本初子午線。大會最終選定了格林威治爲標準的0度。儘管時區被肯定 了下來,可是各個國家並無馬上更改他們的時間規範,在美國,儘管到1895年已經有不少州開始使用標準時區時間,國會直到1918年才強制使用會議制定 的時間規範。
今天各個國家使用的是一個Fleming時區規範的一個變種,中國一共跨越了5個時區,可是使用了一個統一的時間規範,比 Coordinated Universal Time(UTC,格林威制時間)早8個小時。俄羅斯也擁護這個時區規範,儘管整個國家使用的時間和標準時區提早了1個小時。澳大利亞使用3個時區,其中 主時區提早於他按Fleming規範的時區半小時。不少中東國家也使用了半時時區(即不是按照Fleming的24個整數時區)。
由於時區是對經度進行劃分,在南極或者北極工做的科學家直接使用了UTC時間,不然南極大陸將被分解成24個時區。
時區的轉化表以下:
UTC Coordinated Universal Time
GMT Greenwich Mean Time, 定義爲 UTC
BST British Summer Time, 定義爲 UTC+1 hour
IST Irish Summer Time, 定義爲 UTC+1 hour
WET Western Europe Time, 定義爲 UTC
WEST Western Europe Summer Time, 定義爲 UTC+1 hour
CET Central Europe Time, 定義爲 UTC+1
CEST Central Europe Summer Time, 定義爲 UTC+2
EET Eastern Europe Time, 定義爲 UTC+2
EEST Eastern Europe Summer Time, 定義爲 UTC+3
MSK Moscow Time, 定義爲 UTC+3
MSD Moscow Summer Time, 定義爲 UTC+4
AST Atlantic Standard Time, 定義爲 UTC-4 hours
ADT Atlantic Daylight Time, 定義爲 UTC-3 hours
NST Newfoundland Standard Time, 定義爲 UTC-3.5 hours
NDT Newfoundland Daylight Time, 定義爲 UTC-2.5 hours
EST Eastern Standard Time, 定義爲 UTC-5 hours
EDT Eastern Daylight Saving Time, 定義爲 UTC-4 hours
CST Central Standard Time, 定義爲 UTC-6 hours
CDT Central Daylight Saving Time, 定義爲 UTC-5 hours
MST Mountain Standard Time, 定義爲 UTC-7 hours
MDT Mountain Daylight Saving Time, 定義爲 UTC-6 hours
PST Pacific Standard Time, 定義爲 UTC-8 hours
PDT Pacific Daylight Saving Time, 定義爲 UTC-7 hours
HST Hawaiian Standard Time, 定義爲 UTC-10 hours
AKST Alaska Standard Time, 定義爲 UTC-9 hours
AKDT Alaska Standard Daylight Saving Time, 定義爲 UTC-8 hours
AEST Australian Eastern Standard Time, 定義爲 UTC+10 hours
AEDT Australian Eastern Daylight Time, 定義爲 UTC+11 hours
ACST Australian Central Standard Time, 定義爲 UTC+9.5 hours
ACDT Australian Central Daylight Time, 定義爲 UTC+10.5 hours
AWST Australian Western Standard Time, 定義爲 UTC+8 hours
下面給出了一些時間,請在不一樣時區之間進行轉化。- 輸入
- 輸入的第一行包含了一個整數N,表示有N組測試數據。接下來N行,每一行包括一個時間和兩個時區的縮寫,它們之間用空格隔開。時間由標準的a.m./p.m給出。midnight表示晚上12點(12:00 a.m.),noon表示中午12點(12:00 p.m.)。
- 輸出
- 假設輸入行給出的時間是在第一個時區中的標準時間,要求輸出這個時間在第二個時區中的標準時間。
- 樣例輸入
4 noon HST CEST 11:29 a.m. EST GMT 6:01 p.m. CST UTC 12:40 p.m. ADT MSK- 樣例輸出
midnight 4:29 p.m. 12:01 a.m. 6:40 p.m.
3.代碼:spa
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 6 using namespace std; 7 8 char zone[32][20] = {"UTC","GMT","BST","IST","WET","WEST", 9 "CET","CEST","EET","EEST","MSK", 10 "MSD","AST","ADT","NST","NDT", 11 "EST","EDT","CST","CDT","MST", 12 "MDT","PST","PDT","HST","AKST", 13 "AKDT","AEST","AEDT","ACST","ACDT", 14 "AWST"}; 15 16 float m_time[32] = {0,0,1,1,0,1,1,2,2,3,3,4,-4,-3,-3.5,-2.5,-5,-4,-6,-5,-7, 17 -6,-8,-7,-10,-9,-8,10,11,9.5,10.5,8}; 18 19 int main() 20 { 21 int n; 22 cin>>n; 23 getchar(); 24 25 char chs[100]; 26 int thour,tminute,minute,diff_minute; 27 float diff_zone; 28 char ch1[20],zone1[20],zone2[20]; 29 while(n--) 30 { 31 gets(chs); 32 if(chs[0] == 'n') 33 { 34 sscanf(chs,"%s%s%s",ch1,zone1,zone2); 35 thour = 12; 36 tminute = 0; 37 } 38 else if(chs[0] == 'm') 39 { 40 sscanf(chs,"%s%s%s",ch1,zone1,zone2); 41 thour = 0; 42 tminute = 0; 43 } 44 else 45 { 46 sscanf(chs,"%d:%d %s%s%s",&thour,&tminute,ch1,zone1,zone2); 47 /*if(ch1[0] == 'a') 48 { 49 if(thour == 12) thour = 0; 50 } 51 else 52 { 53 if(thour != 12) thour += 12; 54 }*/ 55 thour %= 12; 56 if(ch1[0] == 'p') thour += 12; 57 } 58 59 minute = thour * 60 + tminute; 60 61 int m_idx1,m_idx2; 62 for(int i = 0; i < 32; i++) 63 { 64 if(!strcmp(zone[i],zone1)) m_idx1 = i; 65 if(!strcmp(zone[i],zone2)) m_idx2 = i; 66 } 67 diff_zone = m_time[m_idx2] - m_time[m_idx1]; 68 minute += (int)(diff_zone * 60); 69 70 if(minute < 0) minute += 1440; 71 minute %= 1440; 72 73 thour = minute / 60; 74 tminute = minute % 60; 75 76 if(thour == 0 && tminute == 0) printf("midnight\n"); 77 else if(thour == 0) printf("12:%02d a.m.\n",tminute); 78 else if(thour < 12) printf("%d:%02d a.m.\n",thour,tminute); 79 else if(thour == 12 && tminute == 0) printf("noon\n"); 80 else if(thour == 12) printf("12:%02d p.m.\n",tminute); 81 else printf("%d:%02d p.m.\n",thour-12,tminute); 82 } 83 84 return 0; 85 }
4.思路:code
(1)一個不當心,錯了N屢次blog
(2)此題目注意時間的表示,好比 12:01 a.m. 指的是凌晨0點01分,注意!這種還有不少要一一注意內存
(3)能夠先轉成分鐘,而後再計算能夠免除不少的麻煩ci