程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 百練 2966 時區轉換 解題報告

百練 2966 時區轉換 解題報告

編輯:C++入門知識

1.鏈接:http://poj.grids.cn/practice/2966/

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.代碼:

 #include <iostream>
 #include <cstdio>
 #include <cstdlib>
 #include <cstring>
 
   
  zone[][] = {,,,,,                     ,,,,                     ,,,,                     ,,,,                     ,,,,                     ,,,,                      
  m_time[] = {,,,,,,,,,,,,-,-,-,-,-,-,-,-,-                     -,-,-,-,-,-,,,,, 
            cin>>      
      chs[                ch1[],zone1[],zone2[     (n--           (chs[] ==               sscanf(chs,             thour =              tminute =            (chs[] ==               sscanf(chs,             thour =              tminute =           
              sscanf(chs,,&thour,&                    
             thour %=              (ch1[] == ) thour +=           
         minute = thour *  +         
                  ( i = ; i < ; i++              (!strcmp(zone[i],zone1)) m_idx1 =             (!strcmp(zone[i],zone2)) m_idx2 =          diff_zone = m_time[m_idx2] -         minute += ()(diff_zone *          
         (minute < ) minute +=          minute %=          
         thour = minute /          tminute = minute %          
         (thour ==  && tminute == ) printf(          (thour == ) printf(          (thour < ) printf(          (thour ==  && tminute == ) printf(          (thour == ) printf(          printf(,thour-      
       }

4.思路:

(1)一個不小心,錯了N多次

(2)此題目注意時間的表示,比如 12:01 a.m. 指的是凌晨0點01分,注意!這種還有很多要一一注意

(3)可以先轉成分鐘,然後再計算可以免除很多的麻煩

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved