ACM1008
题目: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的日期算出总天数就可以解决问题。
所以算法的步骤如下:
- 根据Haab的输入日期计算出总天数。
- 根据总天数计算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%==&¤tYear>){
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的更多相关文章
- ACM1008:Elevator
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- hd acm1008
Problem Description The highest building in our city has only one elevator. A request list is made u ...
- C# ACM poj1008
玛雅历 public static void Acm1008(int day, string mon, int year) { ; switch (mon) { case "pop" ...
随机推荐
- javascript 实现斐波那契数列的不同姿势
快过年了,公司人基本上都走光了,只有共和国最优秀的人才,各部门最重要的岗位才会坚守在各自的转椅上,毕竟每个人的能力有限,与其让他们继续工作,不如放他们回家过年.这觉悟很高,这领悟很痛~ 闲着没事 ...
- BZOJ 2959: 长跑 [lct 双连通分量 并查集]
2959: 长跑 题意:字词加入边,修改点权,询问两点间走一条路径的最大点权和.不一定是树 不是树
- 保存文件名至txt文件中,不含后缀
准备深度学习的训练数据时,可能会用到将图片文件名保存到txt文件中,所以用python实现了该功能.输入参数只设了两个,图片存放路径,和输出的txt文件名. 代码里写死了只识别.jpg格式,并不进行目 ...
- 一个很好的MySQL在线学习平台
一个很好的MySQL在线学习平台 https://www.techonthenet.com/sql/
- mysql 修改默认字符集为utf8
MySQL 5.5, all you need is: [mysqld] character_set_client=utf8 character_set_server=utf8 collation_s ...
- win7本地连接消失
可能原因一 驱动程序错误: 右键"计算机"图标 - "属性" - 设备管理器现在在设备管理器下面找到"网络适配器",在下面的网卡驱动中发现有 ...
- easyui datagrid 右边框被隐藏
问题前: 如下图: 解决思路: 待文档加载完成后再执行dategrid函数 $(function () { $("#tt").datagrid({ //....... }); }) ...
- 【Unity3D技术文档翻译】第1.4篇 AssetBundle 依赖关系
上一章:[Unity3D技术文档翻译]第1.3篇 创建 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...
- 剑指offer第二天
18.二叉树的镜像 操作给定的二叉树,将其变换为源二叉树的镜像. /** public class TreeNode { int val = 0; TreeNode left = null; Tree ...
- SpringBoot idea maven打包war
什么都不需要配置,跟着做! pom.xml修改打包类型为war <packaging>war</packaging> 排除内置Tomcat <!--因配置外部TOMCAT ...