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" ...
随机推荐
- BZOJ 2406: 矩阵 [上下界网络流 二分答案]
2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...
- CF 455D. Serega and Fun [分块 deque]
Serega and Fun 题意: [l,r]循环右移一位,查询区间内某个数出现次数 为什么好多人用链表?反正我是不会写双向链表 完全可以分块然后模拟啊...中间的块只会插入删除一个元素呀....用 ...
- BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]
传送门 题意: 长为$n$的序列,第$i$位至少$b_i$,$m$种区间使$[l_i,r_i]+1$代价为$a_i$ 求满足的最小花费 复习单纯形法重做一遍 原始问题$m$个变量$n$个约束,$a_{ ...
- BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster [广义后缀自动机]
JZPGYZ - Sevenk Love Oimaster Oimaster and sevenk love each other. But recently,sevenk hea ...
- java设计模式在公众号的应用——我是一个快乐的单例
终于可以休息了,寻一把躺椅,安置于庭院,携一壶好茶,品一番风轻云淡... 自由自在的呼吸,伸手即可触摸阳光的温度,此时此刻,我就是我,像一个单例. 想起『设计模式』,就像想起了很久很久以前的故事,今日 ...
- python基础dict,集合,文件
字典是一种key:value的数据类型dict1{ 'stud1':'孙礼昭', 'stud2':'slz', 'stud3':'sunlizhao',}dict是无序的,key是唯一的 天生去重增 ...
- hbuilder ios 打包失败,无法导入p12证书的解决方案
问题描述: 在profile文件和私钥证书通过hbuilder ios 打包成功过的前提下,突然遇到打包失败的问题,问题详情是无法导入p12证书. 探索过程: 本着遇到问题先自省的态度,重复打包了几次 ...
- [Python Study Notes]实现对键盘控制与监控
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- CentOS 7 安装Maven
Maven的下载地址是:http://maven.apache.org/download.cgi 安装Maven非常简单,只需要将下载的压缩文件解压就可以了. cd /data wget http:/ ...
- Servlet3.0上传图片示例
一.前端JSP页面 <%@page pageEncoding="UTF-8"%><!DOCTYPE html><html><head> ...