这道题貌似看上去很难,可是却是纸老虎。只要想到一点,问题便迎刃而解:把Haab日历,转换成天数,再根据天数,来求Tzolkin日历的日期,转换成的天数,是两个日历的纽带,代码如下:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//freopen("in.txt","r",stdin);
string c[19]={"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac",
"ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"};
string b[20]={"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik","lamat", "muluk", "ok",
"chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"};
int a[13][20];//用来存储Tzolkin日历的数字
int day,year;
char pot;
string month;
int T,SurD,Year,p,q,m;
int n,i,j,s=1;
for(i=0;i<13;i++)
{
for(j=0;j<20;j++)
{
if(s>13)
s=1;
a[i][j]=s++;
}
}
cin>>n;
cout<<n<<endl;
while(n--)
{
cin>>day>>pot>>month>>year;
for(i=0;i<19;i++)
if(month==c[i])
{//把字符串的month转换成和它对应的数字
m=i;
break;
}
T=day+m*20+year*365;//计算总的天数
Year=T/260;//计算Tzolkin日历的年
SurD=T%260;//取得余下的天数
p=SurD/20;//计算要转换的日期的数字所在的行
q=SurD%20;//计算要转换的日期数字所在的列
cout<<a[p][q]<<" "<<b[q]<<" "<<Year<<endl;
}
return 0;
}
嘿嘿……这是我这几天来,独自做出来第一道题,虽然简单一些,但至少给了我自信心,让我能坚持下去。