解法 一:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char hMonthName[19][8]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
char tDayName[20][9]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
int shift (char a[])
{
int i=0;
while(i<19)
{ if(strcmp(hMonthName[i],a)==0)
{
return i;
break;
}
i++;
}
return -1;
}
int main ()
{
int n,totlehaabdays,Haabmonths,sub1,mm;
int Haabyears,zolkinyears,Haabdays;
char Haabdaysname[4],Haabmonthname [6];
int aa[800]={0},bb[800]={0},yy[800]={0};
cin >>n;
for (int i=0;i<n;i++)
{
cin >>Haabdaysname>>Haabmonthname>>Haabyears;
if(Haabdaysname[1]=='.')
Haabdays=Haabdaysname[0]-'0';
else
Haabdays=(Haabdaysname[0]-'0')*10+(Haabdaysname[1]-'0');
Haabmonths=shift(Haabmonthname);
totlehaabdays=Haabyears*365+Haabmonths*20+Haabdays;
zolkinyears=totlehaabdays/260;
yy[i]=zolkinyears;
mm=totlehaabdays%260;
sub1=mm%13;
aa[i]=sub1+1;
bb[i]=mm%20;
}
cout<<n<<endl;
for (int j=0;j<n;j++)
{
cout <<aa[j]<<" "<<tDayName[(bb[j])]<<" "<< yy[j]<<endl;
}
return 0;
}
另一种解法
#include <stdio.h>
#include <string.h>
#define N 800
const char HaabMonth[][10]={"pop", "no", "zip", "zotz", "tzec", "xul",
"yoxkin", "mol", "chen", "yax", "zac", "ceh",
"mac", "kankin", "muan", "pax", "koyab", "cumhu", "uayet"};
const char TzolkinDay[][10]={"imix", "ik", "akbal", "kan", "chicchan",
"cimi", "manik", "lamat", "muluk", "ok",
"chuen", "eb", "ben", "ix", "mem",
"cib", "caban", "eznab", "canac", "ahau"};
struct Haab
{
int day;
char month[10];
int year;
};
int main(void)
{
int n;
struct Haab haDigit[N];
int i, j;
int totalDay, outDay, outMonth, outYear;
scanf("%d", &n);
for(i=0; i <n; i++)
scanf("%d. %s %d", &haDigit[i].day, haDigit[i].month, &haDigit[i].year);
printf("%d\n", n);
for(i=0; i <n; i++)
{
for(j=0; strcmp(haDigit[i].month, HaabMonth[j]) != 0; )
j++;
totalDay = haDigit[i].year * 365 + j * 20 + haDigit[i].day;
outYear = totalDay/260;
outMonth = (totalDay - outYear*260)%13;
outDay = (totalDay - outYear*260)%20;
printf("%d %s %d\n", outMonth + 1, TzolkinDay[outDay], outYear);
}
return 0;
}