题目: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. MIB Browser如何导入已编译的mib

    开发过程中,如果需要来回在几套mib之间来回切换,每次都进行编译工作那将是一件很繁琐的事情,我们可以直接导入已经编译好的mib文件,避免重复的编译工作. 第一步,备份已经编译好的mib文件.    将 ...

  2. 夏令营讲课内容整理 Day 7.

    Day7是夏令营的最后一天,这一天主要讲了骗分技巧和往年经典的一些NOIP试题以及比赛策略. 这天有个小插曲,上午的day7T3是一道和树有关的题,我是想破脑袋也想不出来,正解写不出来就写暴力吧,暴力 ...

  3. Nginx Rewrite规则详解

    Rewrite规则含义就是某个URL重写成特定的URL,从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等. Rewrite规则的最后一项参数为flag标记,支持的flag标记主要有以下几种 ...

  4. ajax同步与异步的坑

      之前工作中一个需求,需要动态的添加一组下拉菜单并为这个菜单绑定一个插件,很明显获取数据用Ajax,这本身是没错的,坑就坑在我用了 同步请求,当服务器端正确返回数据时再去执行下一个方法,这逻辑本身没 ...

  5. iOS 开发之 Xcode installation failed invalid argument!

    1.运行模拟器的时候 报出:installation failed invalid argument! 原因分析:我把Bundle indentifier 置为空了! http://stackover ...

  6. win7局域网共享文件

    调整共享文件所在电脑设置: 1. 关闭防火墙 2. 更改网络设置 ①打开网络和共享中心 ②进入"选择家庭组和共享选项" ③进入"更改高级共享设置" ④调整设置并 ...

  7. Zabbix 3.2.4至3.2.7的升级方案

    1.关闭Zabbix Server 防止有新的数据提交到数据库中,也可以关闭数据库.如果更新过程中,评估告警信息可以忽略,可以先执行备份操作. 1.1.检查当前版本 /usr/local/zabbix ...

  8. 华为云照片的爬虫程序更新(python3.6)

    一.背景: 每年终都有一个习惯,就是整理资料进行归档,结果发现手机照片全备份在华为云里,在官网上找了一圈,没找到官方的pc工具用来同步照片. 于是找出上次写的程序,看看能不能爬到数据,然而……果然不好 ...

  9. 接口测试基础(fiddler、postman的使用、python实现测试接口程序)

    写在前面:本文主要的章节规划: 1.什么是接口测试    另外,有的时候会直接调用别的公司的接口,比如银行的.淘宝的.支付宝的,此时也需要做接口测试以及验证数据: 做接口测试的好处:      其中, ...

  10. 麻省理工18年春软件构造课程阅读02“Java基础”

    本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材 ...