PKU ACM 1008 玛雅历
生活随笔
收集整理的這篇文章主要介紹了
PKU ACM 1008 玛雅历
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:瑪雅歷
Description
上周末,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表示?,斞湃苏J為這個日期最少的月份是不吉利的,在這個月法庭不開庭,人們不從事交易,甚至沒有人打掃屋中的地板。因為宗教的原因,瑪雅人還使用了另一個歷法,在這個歷法中年被稱為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歷。
Input
Haab歷中的數據由如下的方式表示:日期. 月份 年數
輸入中的第一行表示要轉化的Haab歷日期的數據量。下面的每一行表示一個日期,年數小于5000。
Output
Tzolkin歷中的數據由如下的方式表示:天數字 天名稱 年數
第一行表示輸出的日期數量。下面的每一行表示一個輸入數據中對應的Tzolkin歷中的日期。
Sample Input
3 10. zac 0 0. pop 0 10. zac 1995
Sample Output
3 3 chuen 0 1 imix 0 9 cimi 2801主要思路:
1. 數據輸入時直接計算出輸入日期與元年元月元日的絕對日期(距離);
2. 通過取模操作就可以計算出 Tzolkin歷中的日期;
3. 注意Tzolkin歷中周期由1開始,因此取模運輸后別忘了加 1
源代碼:
#include <iostream> #include <string> using namespace std;string Month[] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"}; string Cycle[] = {"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"};int main() {int size;cin >> size;int* AbsData = new int[size];float d = 0;string sm = "";int m = 0;int y = 0;for(int i = 0; i < size; i++){cin >> d >> sm >> y;for(m = 1; m <= 18; m++){if(sm == Month[m-1])break;}AbsData[i] = 365 * y + 20 * (m - 1) + (d);//cout << AbsData[i] << endl;}int day = 0;cout << size << endl;for(int j = 0; j < size; j++){y = AbsData[j] / 260;m = AbsData[j] % 13 + 1;day = AbsData[j] % 20;cout << m << " " << Cycle[day] << " " << y << endl;}return 0; }總結
以上是生活随笔為你收集整理的PKU ACM 1008 玛雅历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个公务员的坎坷“仕途”,以及五光十色的
- 下一篇: 最全的英语收藏夹(精品)