Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 72250 Accepted: 22225

描述

玛雅文明使用365天的年历,称为Haab历法,有19个月,前18个月都是20天,月名为: pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu.不考虑月名,每个月中,每天标记为0,1,… , 19.Haab的最后一个月称为uayet ,每天标记为0,1,2,3,4。玛雅人相信这个月是不幸的。

出于宗教目的,玛雅使用另一种日历,一年称为Tzolkin (holly year)。一年被分为13个区间,每个区间20天。每天被标记为(day_number,day_name)使用13个day_number(数字1~13)和20个day_name分别为: imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau ;(day_number和day_name同时循环)

请注意每一天都有明确的描述,例如:
在年初具有如下表示:
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, 继续进入下个20循环 8 imix, 9 ik, 10 akbal …

在Haab和Tzolkin的中,年都被数组0,1,…,标记,数字0是世界的开始。因此,第一天是:
Haab: 0. pop 0
Tzolkin: 1 imix 0
编写一个程序,将日期从Haab转换为Tzolkin

输入

Haab日期输入的格式:NumberOfTheDay. Month Year
第一行是输入的日期的个数,之后的n行包含n个Haab日期,输入的年小于5000.

输出

Tzolkin日期输出的格式:Number NameOfTheDay Year
第一行是输出的日期的个数,之后的n行包含n个Tzolkin日期,输出的顺序对应输入的日期

输入样例

3
10. zac 0
0. pop 0
10. zac 1995

输出样例

3
3 chuen 0
1 imix 0
9 cimi 2801

思路:

从世界开始时经历的总天数sumday
sumday=年*365+月份*20+日+1,
其中,
年:是输入的年份,因为从0开始计数,所以已经默认减去1
月份:由于存在数组中,数组的下表从0开始计数,所以已经默认减去1
日:由于输入的日从0开始计数,所以应该+1则为真实的天数
结果的天数是sumday%13,如果结果为0则输出13(Tzolkin的13循环从1开始计数)
结果的天名是sumday%20,如果结果为0则对应的是第20天,只要处理一下天名的数组,将第20天放在下标0处即可。
结果的年份是sumday/260,注意!是当给出的sumday恰好是260时,输出年份是0年,此时正确,但如果是是260的2倍或者以上倍数,即:
sumday == x*260 (x>1, x为整数),
则输出年份应为x-1。
所以经过统一的处理:输出的Tzolkin日历的年份应为:
(sumday-1)/260

c++实现

#include <iostream>
#include <string.h>
#include <stdio.h>using namespace std;const char hmonth[19][10] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin","mol", "chen", "yax", "zac", "ceh", "mac", "kankin","muan", "pax", "koyab", "cumhu","uayet"};
const char tzday[20][10] = { "ahau","imix", "ik", "akbal", "kan","chicchan", "cimi", "manik", "lamat", "muluk", "ok","chuen", "eb", "ben", "ix", "mem", "cib", "caban","eznab", "canac"};//把第20天放在第0个位置,因为取余运算结果为0时表示第20天
int find_month(char* month){for(int i = 0; i <20; i++){if(!strcmp(month, hmonth[i])){return i;//hmonth在数组中从0开始计数}}return -1;
}int main()
{int ncase;cin >> ncase;cout << ncase << endl;int day,year;char month[10];//存放月份名for(int i = 0; i < ncase; i++){scanf("%d. %s %d", &day, &month, &year);int imonth = find_month(month);//月份对应的数字已经减去1int sumday = year*365+imonth*20+day+1;//day从0开始计数int tyear = (sumday-1)/260;//当年份为260的2倍及以上整数倍时,不-1则输出多了1年int tday = sumday%13;if(tday==0)tday=13;int tmonth = sumday%20;cout<< tday << " " << tzday[tmonth] << " " << tyear << endl;}return 0;
}

参考

http://blog.csdn.net/shaw1994/article/details/12308965
http://www.cnblogs.com/ay27/archive/2013/02/24/2924012.html

POJ 1008 玛雅日历相关推荐

  1. POJ - 1008 Maya Calendar

    简单模拟,现将第一种日历表示的天数计算出来,再转换为第二种日历.注意边写边检查 POJ - 1008Maya Calendar Time Limit: 1000MS Memory Limit: 100 ...

  2. POJ 百炼 保研机试 2965:玛雅历

    2965:玛雅历 查看 提交 统计 提示 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现.从一个古老的节绳(玛雅人用于 ...

  3. Bailian2965 玛雅历【日期计算】

    2965:玛雅历 总时间限制: 1000ms 内存限制: 65536kB 描述 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现.从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了 ...

  4. 2019北京大学研究生推免上机考试

    百炼oj A:有趣的跳跃 总时间限制: 1000ms 内存限制: 65536kB 描述 一个长度为n(n>0)的序列中存在"有趣的跳跃"当前仅当相邻元素的差的绝对值经过排序后 ...

  5. 总结——STL 常用数据结构及用法

    STL中常用数据结构及用法 C++中的STL(Standard Template Library),即标准模板库,中包含了很多编程时常用的数据结构,省去了自己临时写的麻烦,这里就来总结一下.如果有错误 ...

  6. 2012年五大领导力

    转http://article.yeeyan.org/view/292465/338789 这篇文章是与Inc--一个为企业家和老板提供切实建议.资源和战略的机构--合作完成的.本文最早见于Inc.c ...

  7. Ruby 语言问世 | 历史上的今天

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 12 月 21 日,在 55 年前的今天,世界第一例心脏移植者逝世:世界上第一个心脏移植病人路易·华 ...

  8. 卡米洛特程 全景图:一种假说

    下面的内容是地球可能面临的变迁详细总结.这与您息息相关.这是一份基于我们目前所掌握资料的理解,带有试探的性质. 由于题目里已经说明了是有试探性的,所以随着事情越来越受人观注,全景图会变地越来越清晰.所 ...

  9. Calendar Game POJ - 1082(关于日历的博弈问题)

    题意: 两个人轮流玩游戏,每个人可以把日期进行转移,转移规则: 1.可以转移到当前日期的下一天. 2可以转移到下个月的这一天.(但是如果下个月没有这一天就不能进行第二种转移) 3.如果A恰好移动到20 ...

  10. 【POJ】1008 Maya Calendar

    参考:https://blog.csdn.net/u011392408/article/details/28866779 https://blog.csdn.net/qq_36424540/artic ...

最新文章

  1. 11-flutter事件监听
  2. codevs——2894 Txx考试(背包)
  3. 冷启动问题:如何构建你的机器学习组合?
  4. 我的世界服务器刷怪笼怎么修改,我的世界改造刷怪笼的方法,有三种方法介绍...
  5. boost::spirit模块实现将由某个分隔符分隔的任意键/值对解析为 std::map的测试程序
  6. 运维少年系列 python and cisco (1)
  7. matlab 点云特征_基于点云的3D障碍物检测
  8. Tomcat6.0 中数据源的配置
  9. MySQL关联eclipse_MySQL JDBC 连接数据库基本操作
  10. MapReduce之Job工具类开发
  11. VMware 安装 Linux---错误-未找到要在其中创建新文件系统的有效设备
  12. 【java笔记】Collections集合工具类
  13. 指向API的函数指针定义方法
  14. android动画浅析
  15. oracle10rac asm hpux,oracle 10g rac asm上面的控制文件损坏既增加方法
  16. iCollections for Mac(桌面图标及文件整理工具)
  17. 微信小程序简洁登录页面(附源码)
  18. VMware windows xp虚拟机设置静态ip
  19. 复数基础——二次公式的复根,复平面上标复数值点_7
  20. 百分比换算十六进制透明度

热门文章

  1. vue element-ui实现input输入框金额数字添加千分位
  2. diamond java_Diamond语法何时在Java 8中不起作用?
  3. 如何才能找到影音文件的真实下载地址
  4. 数据全裸时代,公开获取上百万条四六级成绩
  5. 使用Python对股票数据进行分析
  6. 掌中革命--手机富媒体
  7. (笔试题)风口的猪-中国牛市
  8. 因机构系统维护服务暂不可用_因合作方系统维护,暂时无法使用是什么意思?...
  9. 电话线配线架是110配线架吗?电话线配线架的接法详细介绍
  10. Android自定义View,仿QQ显示用户等级