首页 > 代码库 > POJ1008 Maya Calendar

POJ1008 Maya Calendar

一、题目源程序

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){    const char *Haab[19]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};    const char *Tzolkin[20]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac",                            "ahau"};    int num;    int hday,tday;    int hmonth,tmonth;    char hname[10],tname[10];    int hyear,tyear;    int i,j=0;    long sum = 0;    scanf("%d", &num);    printf("%d\n",num);    for(i = 0; i<num; i++)    {        scanf("%d.%s %d",&hday,&hname,&hyear);        j=0;        while(strcmp(hname,Haab[j]) !=0)            j++;        hmonth = j;          sum = hyear * 365 + hmonth * 20 + hday+1;          tyear = sum / 260;          tmonth =sum%260;         if((sum >=259) && ((sum%260) == 0))//此处应该特别注意,最后一天的处理,例如260 这天是0年而不是1年         {              tyear-=1;         }          if(tmonth % 20 == 0)//处理整除的情况下应该为最后一个数,而不是第一个数          {              tmonth = 19;          }          else          {              tmonth = tmonth%20-1;          }          tday = sum%260;          if(tday % 13 == 0)              tday =13;          else              tday %= 13;          strcpy(tname,Tzolkin[tmonth]);          printf("%d %s %d\n",tday,tname,tyear);        }    return 0;}

二、解题思路

1.本题解题思路较为简单。主要是求出总天数。

2.注意一些细节问题

3.日期与对应名字的转换可以通过数组来实现!

三、心得体会

起初,日期与对应名字的转换,我是通过switch选择结构来做的,占用很大篇幅。之后才知道可以用数组做,简单很多,方便很多。

就是在这种不断积累中实现进步的!