0017-玛雅历

问题描述

上周末,M.A 教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有 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.教授写一个程序可以把 Haab 历转化成 Tzolkin 历。

输入

Haab 历中的数据由如下的方式表示:
日期. 月份 年数
第一行表示要转化的 Haab 历的数据量。下面的每一行表示一个日期,年数小于5000。

输出

Tzolkin 历中的数据由如下的方式表示:
天数字 天名称 年数
第一行表示需要转化的 Haab 历的数据量。下面的每一行表示一个日期。

输入样列

3
10. zac 0
0. pop 0
10. zac 1995

输出样例

3
3 chuen 0
1 imix 0
9 cimi 2801

算法实现

using System;

namespace Questions{
    class Program{
        public static void Main(string[] args){
            string[] tzolkin = {
                "imix","ik","akbal","kan","chicchan",
                "cimi","manik","lamat","muluk","ok",
                "chuen","eb","ben","ix","mem","cib",
                "caban","eznab","canac","ahau" };
            string[] haab = { 
                "pop","no","zip","zotz","tzec",
                "xul","yoxkin","mol","chen","yax",
                "zac","ceh","mac","kankin","muan",
                "pax","koyab","cumh" }; 

            int n = int.Parse(Console.ReadLine());
            while(n > 0){
                n--;
                string input = Console.ReadLine();
                string[] data = input.Split();
                int sum = int.Parse(data[2])*365;
                for (int i = 0; i < 19; i++) {
                    if (data[1].Equals(haab[i])) {
                        break;
                    }
                    sum += 20;
                }
                int dayHaab = 0;
                int j = 0;
                while (true) {
                    if (data[0][j] == '.')
                        break;
                    dayHaab = dayHaab * 10 + data[0][j++] - '0';
                }
                sum += dayHaab;
                int year = sum / 260;
                sum = sum % 260;
                string moon = tzolkin[sum % 20];
                //在Haab中0是每个月第一天所有,而Tzolkin1是每个月的第一天
                int day = (sum+1) % 13;
                if (day == 0)
                    day = 13;
                Console.WriteLine("{0} {1} {2}", day, moon, year);
            }
            Console.ReadKey();
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容