这道题貌似看上去很难,可是却是纸老虎。只要想到一点,问题便迎刃而解:把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;
}

嘿嘿……这是我这几天来,独自做出来第一道题,虽然简单一些,但至少给了我自信心,让我能坚持下去。