题目:Haab日历和Tzolkin日历的转换。

Maya一共有两种日历,第一种日历名为Haab,将一年分为365天,一共有19个月。其中前18个月,分别命名为pop、nozip、zotz、tzec、xul、yoxkin、mol、chen、yax、zac、ceh、mac、kankin、muan、pax、koyab、cumhu,每个月一共20天,用数字0-19表示;最后一个月叫做uayet,一共只有5天,用数字0-4表示。

例子:0 pop 表示第1个月pop的第1天

另一种日历的名称为Tzolkin,将一年分为13个时期,每一个时期长20天,每一天由一个数字和一个名字标志。20个名字分别为imix、ik、akbal、kan、chicchan、cimi、manik、amat、muluk、ok、chuen、eb、ben、ix、mem、cib、caban、eznab、canac、ahau,一共有13个数字1—13。

例子:Tzolkin每一年的日历表示如下:1 imix、2 ik、3 akbal、4 kan、5 chicchan、6 cimi、7 manik、8 amat、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、11 kan、12 chicchan。

Haab和Tzolkin日历的年份由数字表示,其中0表示第1年。

通过输入Haab的当前的日期,转化为Tzolkin的日期表示形式并输出。

 

样例输入:

第一行输入日期的个数,第2—n行输入Haab的日期。

每一行的输入格式为:天——月份——年份

如:

3

10. zac 0

0. pop 0

10. zac 1995

结果输出:

第一行输出日期的个数,第2—n行输出结果。

输出的格式为:数字——每一天的名字——年份

结果如下:

3

3 chuen 0

1 imix 0

9 cimi 2801

 

程序设计的想法:

只要通过Haab的日期算出总天数就可以解决问题。

所以算法的步骤如下:

  1. 根据Haab的输入日期计算出总天数。
  2. 根据总天数计算Tzolkin对应的年份以及和天数。

源代码设计(测试时间16ms,占用内存200k):


 #include <iostream>
#include <string>
using namespace std;
void showDate(){
char allStr[][] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu","uayet"};
int totalDays=year*;
string result;
char resultChar[][]={ "imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"};
for(int i=;i<;i++){
if(strcmp(month,allStr[i])==){
totalDays+=i*;
break;
}
}
totalDays+=(day+);
int resultMonth=totalDays%;
if(resultMonth==)
result="ahau";
else
result=resultChar[totalDays%-];
int date = totalDays%;
if(date==){
date=;
}
cout<<date<<" ";
int currentYear = totalDays/;
if(totalDays%==&&currentYear>){
currentYear--;
}
cout<<result<<" ";
cout<<currentYear<<endl;
}
int main()
{
int number = ;
int index=;
char line[];
cin>>number;
int day=;
int year=;
char skip;
char month[];
cout<<number<<endl;
while(index<number){
cin>>day>>skip>>month>>year;
showDate (day,month,year);
index++;
}
return ;
}

总结:

要注意边界值的处理,在计算年份的时候,如果不仔细的话有可能会出错。比如说,通过计算得出总天数为260,刚好是Tzolkin一年的时间,但是仍然算作是第1年。

ACM1008的更多相关文章

  1. ACM1008:Elevator

    Problem Description The highest building in our city has only one elevator. A request list is made u ...

  2. hd acm1008

    Problem Description The highest building in our city has only one elevator. A request list is made u ...

  3. C# ACM poj1008

    玛雅历 public static void Acm1008(int day, string mon, int year) { ; switch (mon) { case "pop" ...

随机推荐

  1. JMS基础篇

    首先我们需要下载 ActiveMQ:http://activemq.apache.org/. 启动 ActiveMQ 服务:解包下载的 ActiveMQ >进去其bin 目录>双击 act ...

  2. setinIerval和setTimeout的区别?

    setTimeout和setInterval的使用 这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript.不过两者各有各的应用场景. 方 法 实际上,setTimeout和setIn ...

  3. BZOJ 3550: [ONTAK2010]Vacation [单纯形法]

    有3N个数,你需要选出一些数,首先保证任意长度为N的区间中选出的数的个数<=K个,其次要保证选出的数的个数最大. 好像都是费用流... 单纯性裸题呀... 注意每个数最多选1次 #include ...

  4. BZOJ 3173: [Tjoi2013]最长上升子序列 [splay DP]

    3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1613  Solved: 839[Submit][St ...

  5. Python之CVXOPT模块

      Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为: 卸载原Pyhon中的Numpy 安装CVXOPT的whl文件,链接为:https://www ...

  6. pip install 提示"no previously-included directories found matching"及"no previously-included files matching found anywhere in distribution",且偶发无法关联安装 PyPI 库的故障

    环境描述: Python 2.7.5 CentOS-7.2   报错现象: (1).在虚拟环境下运行 pip install 命令安装 PyPI 第三方库,出现类似如下告警. Running setu ...

  7. asp.net core 中 sql server 2017 数据库连接测试

    使用sql server 2017 进行连接: 配置appsettings.json文件 { "ConnectionStrings": { "DefaultConnect ...

  8. Spring基础篇——通过Java注解和XML配置装配bean

    自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...

  9. block,inline,inline-block的区别

    最近正在复习,紧张地准备几天后的笔试,然后刚好看到这个地方. block:块级元素,会换行,如div,p,h1~h6,table这些,可以设置宽高:    inline:行内元素,不换行,挤在一行显示 ...

  10. jq实现数字增加或者减少的动画

    效果图: 1.HTML: <div class="up"></div> <br> <div class="down"& ...