c069: 00602 - What Day Is It?

出處http://zerojudge.tw/ShowProblem?problemid=c069

內容 :

現行的曆法是從羅馬人演變而來的。凱撒大帝編纂了一套曆法,後人稱之為儒略曆 (Julian calendar)。在這曆法中,除了四、六、九、及十一月有30天,二月在平年有28年,在閏年有29天以外,其他的月份都是31天。再者,在這曆法中,每四年有一個閏年。這導因於古代羅馬的星象學家算出一年有365.25天,因此每隔四年就要加一天以保持曆法和季節的一致。於是,他們就在四的倍數的年份多加了一天 (二月29日)。

儒略法:

四的倍數的年份均為閏年,這年會多一天 (二月29日)。

在1582年,教宗格勒哥里 (Gregory) 的星象學家發現一年並不是365.25天,而是比較接近365.2425天。因此,閏年的規則便修正如下:

格瑞哥里法:

除了不是400的倍數的100的倍數以外,四的倍數的年份均為閏年。

為了要彌補截至當時季節和日曆已產生的誤差,當時的日曆便往前挪移了10天:1582年10月4日的第二天為10月15日。

英格蘭和它的帝國 (包括美國) 一直到1752年才改用格瑞哥里曆,當年的9月2日的第二天為9月14日。(未同步採用新曆乃肇因於亨利八世和教宗的惡劣關係。)

寫一個程式可以依美國當時的曆法來轉換日期,並印出星期幾。

Miguel A. Revilla

1999-03-24

郭兆平譯

2005-10-26

輸入說明 :

程式的輸入為一連串的大於0的正整數,每一行有3個整數,代表一個日期。日期的格式為 "月 日 年",其中月份以1 (表示一月) 到 12 (表示十二月) 的數字來代表,日則是一個1到33間的數字,而年則為正數。

輸出說明 :

程式的輸出則為依範例格式所輸入的日期和那天星期幾。不正確的日期或依美國當時的曆法不存在的日期則應產生一個錯誤訊息告知日期不正確。輸入的結束會有三個0。 請參考範例輸出。

範例輸入 :

1 1 1

10 4 1582

10 5 1582

1 1 2000

7 4 1998

2 11 1732

9 2 1752

9 3 1752

9 14 1752

4 33 1997

11 15 1997

12 9 2005

0 0 0

範例輸出 :

January 1, 1 is a Saturday

October 4, 1582 is a Thursday

October 5, 1582 is a Friday

January 1, 2000 is a Saturday

July 4, 1998 is a Saturday

February 11, 1732 is a Friday

September 2, 1752 is a Wednesday

9/3/1752 is an invalid date.

September 14, 1752 is a Thursday

4/33/1997 is an invalid date.

November 15, 1997 is a Saturday

December 9, 2005 is a Friday

提示 :

* 中文翻譯:Lucky 貓

出處 :

ACM 602 (管理:)

解題策略

注意1752年9月2日到9月14日要特別處理。

待完成或參考程式碼