天天看點

07:瑪雅曆

來源:http://noi.openjudge.cn/ch0113/07/

POJ 1008

<dl><dt>總時間限制:1000ms  記憶體限制:65536kB</dt></dl>

<dl></dl>

<dt>描述</dt>

<dd></dd>

上周末,M.A. Ya教授對古老的瑪雅有了一個重大發現。從一個古老的節繩(瑪雅人用于記事的工具)中,教授發現瑪雅人使用了一個一年有365天的叫做Haab的曆法。這個Haab曆法擁有19個月,在開始的18個月,一個月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。這些月份中的日期用0到19表示。Haab曆的最後一個月叫做uayet,它隻有5天,用0到4表示。瑪雅人認為這個日期最少的月份是不吉利的,在這個月法庭不開庭,人們不從事交易,甚至沒有人打掃屋中的地闆。

因為宗教的原因,瑪雅人還使用了另一個曆法,在這個曆法中年被稱為Tzolkin(holly年),一年被分成13個不同的時期,每個時期有20天,每一天用一個數字和一個單詞相組合的形式來表示。使用的數字是1~13,使用的單詞共有20個,它們分别是:imix,

ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb,

ben, ix, mem, cib, caban, eznab, canac,

ahau。注意:年中的每一天都有着明确唯一的描述,比如,在一年的開始,日期如下描述: 1 imix, 2 ik, 3 akbal, 4 kan,

5 chicchan, 6 cimi, 7 manik, 8 lamat, 9 muluk, 10 ok, 11 chuen, 12 eb,

13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6 canac, 7 ahau, ,8 imix, 9

ik, 10 akbal ……也就是說數字和單詞各自獨立循環使用。

Haab曆和Tzolkin曆中的年都用數字0,1,……表示,數字0表示世界的開始。是以第一天被表示成:

Haab: 0. pop 0

Tzolkin: 1 imix 0

請幫助M.A. Ya教授寫一個程式可以把Haab曆轉化成Tzolkin曆。

<dt>輸入</dt>

<dd>Haab曆中的資料由如下的方式表示:</dd>

日期. 月份 年數

輸入中的第一行表示要轉化的Haab曆日期的資料量。下面的每一行表示一個日期,年數小于5000。

<dt>輸出</dt>

<dd>Tzolkin曆中的資料由如下的方式表示:</dd>

天數字 天名稱 年數

第一行表示輸出的日期數量。下面的每一行表示一個輸入資料中對應的Tzolkin曆中的日期。

<dt>樣例輸入</dt>

<dt>樣例輸出</dt>

思路分析:

1、先将輸入的日期轉換為距離日期開始點的天數

    temp=findHaabMonth(HaabMonth);//根據輸入的月份的名字傳回該月份的序号(1~19)

    sum=HaabYear*365+(temp-1)*20+HaabDay+1;

    //這個地方temp-1是表示要計算第temp個月之前的temp-1個月的天數;

    //HaabDay+1是因為輸入的日期編号是從0開始的。

2、然後根據sum計算對應的Tzolkin曆的年、天數字、天名稱(過程參考代碼注釋)

注意這組特殊資料:

4. uayet 259

正解是13 ahau 364

而不是13 ahau 365

也就是說,假如給的日期對應到Tzolkin曆某一年的最後一天,那麼總天數sum/260求得的年份值應當減掉1.

(因為雖然總共經曆了sum/260年,但是月曆表示中,當天是上一年最後一天,故年份值sum/260需要減掉1.)

詳細代碼:

繼續閱讀