poj1008(Maya Calendar)

poj1008(Maya Calendar)

完整题意(摘录与百度贴吧):

在他的最近的一次休假期间,博士M.A.Ya有了一个惊人的发现,是关于一个古老玛亚日历。
来自一个很老的信息,教授发现,这个玛亚文明使用了一个365天长的一年,叫Haab,它有19个月。
前18个月是20天长,这些月份的名字是: 
pop,no,zip,zotz,tzec,xul,yoxkin,mol,chen,
yax,zac,ceh,mac,kankin,muan,pax,koyab,cumhu。 

起名字,这些月的天被019的数字指定。Haab的最后一个月被叫作uayet有5天,分别由0,1,2,3,4指定。 
这些玛亚人相信,这个月是没有好运气的,在这一段时间里,正确的事不存在,贸易停止了,人们连地都不扫。 

为了宗教的目的,在这一年中,这些玛亚人使用了其它的日历,这种年被称为Tzolkin(holly年)。
这个年被分进十三个时期中,每一个20天长。每一天由一个数字和这天的名字一起表示。它们用20个名字:
imix,ik,akbal,kan,chicchan,cimi,manik,lamat,muluk,ok,
chuen,eb,ben,ix,mem,cib,caban,eznab,Canac,ahau
和 数字(1~13)一起在一个20天月的周期里成对表示一天。 

注意:每一天有一个清楚的描述。举个例子,在这一年所有天的最开始的一天 

被描述成以下: 
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, 8 imix, 9 ik, 10 akbal . . .

年(Haab和Tzolkin两个都是)被指示,被数字01,…,这个数字0是世界的最开始的地方。那么,第一天是: 
· Haab: 0. pop 0        (Haab年:第0天,pop天名,第0年)
· Tzolkin: 1 imix 0 (Tzolkin年:第0天,imix天名,第0年) 

帮助教授M.A.Ya写一个程序,给他转换日期, 
从Haab日历转换成Tzolkin日历。 

Input 
在下列格式中,Haab年里的日期被给予: 

天的编号. 月 年 

在输入里,输入的第一行包含这些输入日期的一个数目。
下一行在Haab日历格式里,包含n个日期,它们的每一个在每个隔行中的。这个年小于5000。 

Output 
在下面的格式中,在Tzolkin里的日期将是。 

编号 天的名字 年 

输出的第一行包含这些输出日期的数目。
在下面n行里,这些是在Tzolkin日历格式里的日期,在这个顺序里,对应着输入的那些日期。 

上面的题目那么长又不想细看,那我就帮忙简述一下吧 ^-^
…题意就是有两种日历:
1、一年365天,19个月。前18个月每月20天,第十九月5天。(每个月都有一个英文名)
2、一年260天,13个月,每月20天。(这260天每一天都有一个名字(由数字0~13和20个字符组合而成)(。。这不由让我想起了天干地支纪年法qaq))
——然后给出日历1的年月日,输出日历2对应的年月日

思路很简单:日历1算出对应的总天数,然后转化到日历2。接着强势模拟一波,出来咯^.^

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;

const int maxn = 5005;
string Haab[20] = {"/","pop", "no", "zip", "zotz", "tzec", "xul",
                   "yoxkin", "mol", "chen", "yax", "zac", "ceh",
                   "mac", "kankin", "muan", "pax", "koyab", "cumhu",
                   "uayet"};
string Tzolkin[20] = {"imix", "ik", "akbal", "kan", "chicchan",
                      "cimi", "manik", "lamat", "muluk", "ok",
                      "chuen", "eb", "ben", "ix", "mem", "cib",
                      "caban", "eznab", "canac", "ahau"};
int main()
{
    int tt;
    scanf("%d",&tt);
    printf("%d\n",tt);
    while(tt--){
        int a, b;
        string c;
        scanf("%d. ",&a);
        cin>>c;
        scanf(" %d",&b);

        int pos = 0;
        for (int i = 1; i < 20; i++){
            if(c == Haab[i]){
                pos = i;
                break;
            }
        }
        int tot = b*365 + (pos-1)*20 + a;
        int x = tot/260;
        int y = tot%260;
        int y1 = y%13+1;
        int y2 = y%20;
        printf("%d ",y1);
        cout<<Tzolkin[y2];
        printf(" %d\n",x);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值