poj1008Maya Calendar

这应该算一种加密题目吧。题目应该不难,但是我wa了很多次。。。

因为我复制粘贴的时候少复制了一个月的名字,难受。

算法就是先算出总天数减1(因为从零开始)。

然后因为减一了所以除260啊,模13啊什么的都不用考虑太复杂了。

#include <stdio.h>
#include <string.h>

//虽然两个结构一模一样,但是为了可读性还是定义了两个
//(根本就是定义完了发现一样但懒得删除)
struct Haab{
    int n;
    char m[10];
    int y;
};

struct Tzolkin{
    int n;
    char m[10];
    int y;
};

Tzolkin ans[5000];

char holly[20][10] = { "imix", "ik", "akbal", "kan",
                       "chicchan", "cimi", "manik", "lamat",
                       "muluk", "ok", "chuen", "eb", "ben", "ix",
                       "mem", "cib", "caban", "eznab", "canac", "ahau"
                     };
//就是它,最后一个uayet没复制进来,wa好多次
char hab[19][10] = {"pop", "no", "zip", "zotz",
                    "tzec", "xul", "yoxkin", "mol", "chen",
                    "yax", "zac", "ceh", "mac",
                    "kankin", "muan", "pax", "koyab", "cumhu","uayet"
                   };

int main()
{
    Haab in;
    int n;

    scanf("%d", &n);

    for(int x = 0; x < n; x++)
    {
        scanf("%d. %s %d", &in.n, in.m, &in.y);

        int days = in.y * 365;
    
        for(int i = 0; i < 19; i++)
            if( strcmp(in.m, hab[i]) == 0)
            {
                days += i * 20;
                break;
            }
        
        days += in.n;//因为日是从0开始,所以days是实际天数减一
                     //所以下面的就能直接算,不用考虑整倍数
        ans[x].y = days / 260;
        strcpy(ans[x].m, holly[days % 20]);
        ans[x].n = days % 13 + 1;
    }

    printf("%d\n", n);

    for(int i = 0 ; i < n; i++)
        printf("%d %s %d\n", ans[i].n, ans[i].m, ans[i].y);

    return 0;
}

唔,我因为期末考试复习了c语言,所以习惯c写,以后尽量用c++。

不写了,学c++去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值