POJ-1008

来源:http://poj.org/problem?id=1008

这题没什么的,先算出总的天数,再算出另一种日历的表示就是了,没什么技巧可言。

需要注意的是一个特殊的数据:

4. uayet 259 ,应输出13 ahau 364

基本上样例过了,再把上面的特殊数据过了就行了。

 

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std;

const char hmonth[19][10] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol",
        "chen", "yax", "zac", "ceh", "mac", "kankin", "muan",
        "pax", "koyab", "cumhu", "uayet"};

const string tday[20] = { "imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat",
                    "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib",
                     "caban", "eznab", "canac", "ahau" };

int find(char *month)
{
    for (int i=0; i<20; i++)
        if (!strcmp(month, hmonth[i]))
        return i;
}


int main()
{
    int ncase;
    cin>>ncase;
    cout<<ncase<<endl;

    int day, year;
    char ch;
    char month[10];

    for (int i=0; i<ncase; i++)
    {
        scanf("%d. %s%d", &day, &month, &year);
        int imonth = find(month);
        int sumday = year*365 + imonth*20 + day+1;
        int tyear = (sumday-1) / 260;   //这里要-1,不然/运算有可能出错
        sumday -= tyear*260;
        int ttday = sumday - (sumday / 13)*13;
            if (ttday == 0) ttday = 13;
        int tmonth = sumday - (sumday / 20) * 20;
        if (tmonth == 0) tmonth = 20;
        cout<<ttday<<" "<<tday[tmonth-1]<<" "<<tyear<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值