玛雅历 —— C++
上周末,M.A. Ya教授對(duì)古老的瑪雅有了一個(gè)重大發(fā)現(xiàn)。從一個(gè)古老的節(jié)繩(瑪雅人用于記事的工具)中,教授發(fā)現(xiàn)瑪雅人使用了一個(gè)一年有365天的叫做Haab的歷法。這個(gè)Haab歷法擁有19個(gè)月,在開始的18個(gè)月,一個(gè)月有20天,月份的名字分別是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。這些月份中的日期用0到19表示。Haab歷的最后一個(gè)月叫做uayet,它只有5天,用0到4表示?,斞湃苏J(rèn)為這個(gè)日期最少的月份是不吉利的,在這個(gè)月法庭不開庭,人們不從事交易,甚至沒有人打掃屋中的地板。
因?yàn)樽诮痰脑?#xff0c;瑪雅人還使用了另一個(gè)歷法,在這個(gè)歷法中年被稱為Tzolkin(holly年),一年被分成13個(gè)不同的時(shí)期,每個(gè)時(shí)期有20天,每一天用一個(gè)數(shù)字和一個(gè)單詞相組合的形式來表示。使用的數(shù)字是1~13,使用的單詞共有20個(gè),它們分別是: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 ……也就是說數(shù)字和單詞各自獨(dú)立循環(huán)使用。
Haab歷和Tzolkin歷中的年都用數(shù)字0,1,……表示,數(shù)字0表示世界的開始。所以第一天被表示成:
Haab: 0. pop 0
Tzolkin: 1 imix 0
請(qǐng)幫助M.A. Ya教授寫一個(gè)程序可以把Haab歷轉(zhuǎn)化成Tzolkin歷。
輸入
Haab歷中的數(shù)據(jù)由如下的方式表示:
日期. 月份 年數(shù)
輸入中的第一行表示要轉(zhuǎn)化的Haab歷日期的數(shù)據(jù)量。下面的每一行表示一個(gè)日期,年數(shù)小于5000。
輸出
Tzolkin歷中的數(shù)據(jù)由如下的方式表示:
天數(shù)字 天名稱 年數(shù)
第一行表示輸出的日期數(shù)量。下面的每一行表示一個(gè)輸入數(shù)據(jù)中對(duì)應(yīng)的Tzolkin歷中的日期。
樣例輸入
3
10. zac 0
0. pop 0
10. zac 1995
樣例輸出
3
3 chuen 0
1 imix 0
9 cimi 2801
代碼:
#include<iostream> #include<string> using namespace std; string hamonth[] = { "pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin","muan", "pax", "koyab", "cumhu","uayet" }; string hou[] = { "imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix","mem", "cib", "caban", "eznab", "canac","ahau" }; int main() {int n; cin >> n;cout << n<<endl;while (n--) {string day, month, year, Day;cin >> Day >> month >> year;day = Day.substr(0, Day.find("."));int i;for (i = 0; i < 19; i++) {if (month == hamonth[i])break;}int days = stoi(day) + 20 * i + 365 * stoi(year);cout << days % 13+1 << " " << hou[days % 20] << " " << days / 260<<endl;}system("pause"); }總結(jié)
以上是生活随笔為你收集整理的玛雅历 —— C++的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js中utf8和中文互转的方法
- 下一篇: 再梳理一下seqtoseq,encode