摘要:本文将带你了解Maya教程之Maya历法,希望本文对大家学Maya有所帮助
本文将带你了解Maya教程之Maya历法,希望本文对大家学Maya有所帮助
在学术休假期间,M.A. Ya教授在古老的Maya历法上有一个惊人的发现。从一个古老的令人棘手的信息中,教授发现Maya文明以365天为一年,称为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、1、2、3、4。玛雅人认为这个月是不吉利的,法院不开庭,贸易停止了,人们甚至停止清扫地板。
出于宗教的目的,Maya人使用另外一套历法,叫做Tzolkin(冬青年)。一年被分为13个期间,每个期间20天。每天被表示为由数字和日期名表示的数对。使用20个名字:imix、ik、akbal、kan、chicchan、cimi、manik、lamat、muluk、ok、chuen、eb、ben、ix、mem、cib、caban、eznab、canac、ahau,以及13个数字,双循环使用。
请注意,每一天都有一个明确的描述。例如,在年初的日子被描述如下:
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日历。
【输入形式】
在Haab中日期用以下形式表示:
NumberOfTheDay. Month Year
输入文件的第一行包含文件中输入日期的数目。接下来的n行包含Haab日历格式的n个日期,年份小于5000。
【输出形式】
Tzolkin日期用一下格式:
Number NameOfTheDay Year
输出包括n行,按照与输入日期对应的顺序,输出tzolkin日历格式日期。
【样例输入】
3
10.zac 0
0.pop 0
10.zac 1995
【样例输出】
3 chuen 0
1 imix 0
9 cimi 2801
问题分析及边界条件
要处理的问题:
1.如何将haab转化为tzolkin历法。
2.如何处理tzolkin历法中类似于天干地支双循环的问题。
边界条件:
haab的第一天从0开始。
haab最后一个月有5天。
算法设计
通过上述分析,将采用下面的方法解决相关问题:
将haab历法中的年月日,转化成我们现在历法中的总天数。
然后根据总天数换算成tzolkin历法中的年月日。
详细设计(从算法到程序)
设计结构体,分别存有haab的年月日,同时设置成员函数,计算出总天数。
使用string类型的字符串数组,记录haab的各个年份,tzolkin的各个天数。
使用三重for循环进行数字和日期的双重循环的演化。
样例设计与测试
测试样例一
hAAb历法中的最后一个月
样例输入
3
2.uayet 12
5.uayet 156
0.uayet 23
样例输出
11 akbal 18
2 cimi 220
7 cib 33
测试样例二
haab中的第一天
样例输入
2
0.mol 155
0.chen 45
样例输出
10 cib 218
11 cimi 63
测试样例三
haab中的任意一天
样例输入
3
15.pax 2018
20.no 111
4.xul 951
样例输出
7 cimi 2834
9 cib 155
ahau 135
程序如下:
#include<iostream>
#include<string>
using namespace std;
string sstr[19]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
struct Haab
{
int num;
string month;
int year;
int sum_days;
void sum_of_days()
{
sum_days=0;
for(int i=0;sstr[i]!=month;i++)
{
sum_days+=20;
}
sum_days+=num+1;
sum_days+=year*365;
}
};
int main()
{
int n;
cin>>n;
Haab h[n];
char ch;
for(int i=0;i<n;i++)
{
cin>>h[i].num>>ch>>h[i].month>>h[i].year;
h[i].sum_of_days();
}
string str[20]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
for(int ii=0;ii<n;ii++)
{
int year=0;
int i=0;
int k=0;
int c=0;
bool flag=1;
for(;flag;year++)
{
for(i=0;i<13&&flag;i++) //error 条件要并列起来,不要用 ,号
{
for(k=0;k<20;k++)
{
h[ii].sum_days--;
c++;
if(c==14)
{
c=1;
}
if(h[ii].sum_days==0)
{
flag=0;
break;
}
}
}
}
cout<<c<<" "<<str[k]<<" "<<year-1<<endl;
}
return 0;
}
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标常用软件之Maya频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号