ACM PKU 1008 http://acm.pku.cn/JudgeOnline/problem?id=1008

解法 一:

#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;
}

posted on 2011-05-06 19:57  _Clarence  阅读(136)  评论(0编辑  收藏  举报

导航