POJ1008 Maya Calendar

【题目大意】:

        玛雅人使用两种历法,分别是Haab历和Tzolkin历,Haab历一年有365天分为19个月,前18个月(从1到19分别用pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu,uayet来表示)每个月有20天,最后一个月很特殊只有5天。Tzolkin历一年只有260天,分为13个时期,每个时期20天,每天的表示由两部分组成。它们用20个字符串(imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau)和13个数字(从1到13)轮询的方式组合起来来表示(类似中国的天干地支计年法,只不过题中是用来计天)如第一天是:1 imix 第二天是:2 ik,依次类推下去是:3 akbal, 4 kan, 5 chicchan, 6 cimi, 7 manik, 8 lamat, 9 muluk, 10 ok, 11 chuen, 12 eb, 13 ben, 1 ix, 2 mem, 3 cib, 4 caban, 5 eznab, 6 canac, 7 ahau, and again in the next period 8 imix, 9 ik, 10 akbal . . .

【要求】:

        给出Haab历的年月日,要你计算Tzolkin历的年月日

【分析】:主要难点在于通过Haab历得到从世界的开始日期到当前的总天数sumdays

【代码】:

#include<stdio.h>
int get_haab_month(char* month)  /*为了得到Haab历的月份*/
{
    int i,total=0;
    for(i=0;month[i];i++)
        total+=month[i];
    switch(total)
    {
        case 335:return 1;  /* pop */
        case 221:return 2;  /* no */
        case 339:return 3;  /* zip */
        case 471:return 4;  /* zotz */
        case 438:return 5;  /* tzec */
        case 345:return 6;  /* xul */
        case 674:return 7;  /* yoxkin */
        case 328:return 8;  /* mol */
        case 414:return 9;  /* chen */
        case 338:return 10;  /* yax */
        case 318:return 11;  /*zac*/
        case 304:return 12;  /*ceh*/
        case 305:return 13;  /*mac*/
        case 636:return 14;  /*kankin*/
        case 433:return 15;  /*muan*/
        case 329:return 16;  /*pax*/
        case 534:return 17;  /*koyab*/
        case 546:return 18;  /*cumhu*/
        case 552:return 19;  /*uayet*/
    }
}
char *p[20]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
/* 保存了Tzolkin历的月份 */
int main(void)
{
    int i,n;
    int haab_day,haab_month,haab_year,sumdays;
    char month[10];
    int tzol_num,tzol_year;
    scanf("%d",&n);
    printf("%d\n",n);
    while(n--)
    {
        scanf("%d. %s %d",&haab_day,month,&haab_year);
        haab_month=get_haab_month(month);
        sumdays=365*haab_year+20*(haab_month-1)+haab_day;  /*得到了Haab历的年月日后就计算总天数sumdays*/
        tzol_year=sumdays/260;  /*Tzolkin历的年份*/
        sumdays-=(tzol_year*260);
        tzol_num=(sumdays)%13+1;  /*Tzolkin历的用于表示每天的前面的数字*/
        i=sumdays%20+1;
        printf("%d %s %d\n",tzol_num,p[i-1],tzol_year);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值