Poj_1008--Maya Calendar
一、Description
因为宗教的原因,玛雅人还使用了另一个历法,在这个历法中年被称为Tzolkin(holly年),一年被分成13个不同的时期,每个时期有20天,每一天用一个数字和一个单词相组合的形式来表示。使用的数字是1~13,使用的单词共有20个,它们分别是:imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau。注意:年中的每一天都有着明确唯一的描述,比如,在一年的开始,日期如下描述:
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, ,8 imix, 9 ik, 10 akbal ……也就是说数字和单词各自独立循环使用。
Haab历和Tzolkin历中的年都用数字0,1,……表示,数字0表示世界的开始。所以第一天被表示成:
Haab: 0. pop 0
Tzolkin: 1 imix 0
请帮助M.A. Ya教授写一个程序可以把Haab历转化成Tzolkin历。
二、问题分析
这个问题我觉得没什么大的问题,就是要注意一下小的细节以及一些特殊情况的考虑。大致上,我们要把Haab历转换为天数,再把天数转换为Tzolkin历。
- 怎样去除输入数字后面的点号?
- 怎样把输入的字母型的月份转换为数字型?
- 怎样计算天数差?
- 怎样计算输出的年数、天数字?
- 怎样转换天名称?
三、问题解决
- 在读取第一个日期的时候,要用字符串存放,然后用replace方法去除“.”,再调用Integer.parseInt(),把字符串解析为整形。
String s=cin.next().replace(".", "");
int day=Integer.parseInt(s.trim()); - 没什么好办法,只能用if-else语句暴力解决,逐个判断输出对应数字。注意数字是从1还是还是从0开始,这与后面的计算有关。
- 计算天数差时要注意由于haab历的天数用0~19表示,所以真正的天数要在输入的基础上加1.而月份如果转换的时候用1~19则月份要减1。年数从0开始,不需要变 。 int days=day+1+(month-1)*20+year*365;
- 计算输出的时候就要注意了,如果天数差是260的整数倍,则年数减1.而在求天数字时,如果天数是13的倍数,则天数就为13。
- 天名称就用年内天数与20取余,再用if--else把数字转换为字符型的表示形式。
- import java.util.Scanner;
- public class Main {
- public static int changeMonths(String str){
- if(str.equals("pop"))
- return 1;
- else if(str.equals("no"))
- return 2;
- else if(str.equals("zip"))
- return 3;
- else if(str.equals("zotz"))
- return 4;
- else if(str.equals("tzec"))
- return 5;
- else if(str.equals("xul"))
- return 6;
- else if(str.equals("yoxkin"))
- return 7;
- else if(str.equals("mol"))
- return 8;
- else if(str.equals("chen"))
- return 9;
- else if(str.equals("yax"))
- return 10;
- else if(str.equals("zac"))
- return 11;
- else if(str.equals("ceh"))
- return 12;
- else if(str.equals("mac"))
- return 13;
- else if(str.equals("kankin"))
- return 14;
- else if(str.equals("muan"))
- return 15;
- else if(str.equals("pax"))
- return 16;
- else if(str.equals("koyab"))
- return 17;
- else if(str.equals("cumhu"))
- return 18;
- else if(str.equals("uayet"))
- return 19;
- return -1;
- }
- public static String changeDays(int i){
- if(i == 1){
- return "imix";
- }else if(i == 2){
- return "ik";
- }else if(i == 3){
- return "akbal";
- }else if(i == 4){
- return "kan";
- }else if(i == 5){
- return "chicchan";
- }else if(i == 6){
- return "cimi";
- }else if(i == 7){
- return "manik";
- }else if(i == 8){
- return "lamat";
- }else if(i == 9){
- return "muluk";
- }else if(i == 10){
- return "ok";
- }else if(i == 11){
- return "chuen";
- }else if(i == 12){
- return "eb";
- }else if(i == 13){
- return "ben";
- }else if(i == 14){
- return "ix";
- }else if(i == 15){
- return "mem";
- }else if(i == 16){
- return "cib";
- }else if(i == 17){
- return "caban";
- }else if(i == 18){
- return "eznab";
- }else if(i == 19){
- return "canac";
- }else {
- return "ahau";
- }
- }
- public static void main(String[] args) {
- Scanner cin=new Scanner(System.in);
- int times=cin.nextInt();
- System.out.println(times);
- for(int i=0;i<times;i++){
- String s=cin.next().replace(".", "");
- int day=Integer.parseInt(s.trim());
- int month=changeMonths(cin.next());
- int year=cin.nextInt();
- int days=day+1+(month-1)*20+year*365;
- if(days % 260==0){
- year=days/260-1;
- }else
- year=days/260;
- day=days % 260;
- int num;
- if(day % 13 ==0)
- num=13;
- else
- num=day % 13;
- int c=day%20;
- System.out.println(num+" "+changeDays(c)+" "+year);
- }
- }
- }
版权声明:本文为博主原创文章,未经博主允许不得转载。
Poj_1008--Maya Calendar的更多相关文章
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- POJ 1008 Maya Calendar
链接:http://poj.org/problem?id=1008 Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
- Maya Calendar 分类: POJ 2015-06-11 21:44 12人阅读 评论(0) 收藏
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70016 Accepted: 21547 D ...
- [POJ] #1008# Maya Calendar : 字符处理/同余问题
一. 题目 Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 74085 Accepted: 2 ...
- Poj OpenJudge 百练 Bailian 1008 Maya Calendar
1.Link: http://poj.org/problem?id=1008 http://bailian.openjudge.cn/practice/1008/ 2.content: Maya Ca ...
- B - Maya Calendar(第二季水)
Description During his last sabbatical, professor M. A. Ya made a surprising discovery about the old ...
- POJ 1008 Maya Calendar / UVA 300【日期转换/常量数组】
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 82431 Accepted: 25319 Descr ...
- POJ1008 Maya Calendar
题目来源:http://poj.org/problem?id=1008 题目大意: Maya人认为一年有365天,但他们有两种日历.一种叫做Haab,有19个月.前18个月每月20天,每个月的名字分别 ...
- [POJ 1008] Maya Calendar C++解题
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62297 Accepted: 192 ...
- Poj Maya Calendar
http://poj.org/problem?id=1008 Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
随机推荐
- 九度OJ 1261:寻找峰值点 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:500 解决:37 题目描述: 给定一个整数序列,该整数序列存在着这几种可能:先递增后递减.先递减后递增.全递减.全递增. 请找出那个最大值的 ...
- 智能家居DIY-空气质量检测篇-获取空气污染指数
前言 话说楼主终于升级当爸了,宝宝现在5个月了,宝宝出生的时候是冬天,正是魔都空气污染严重的时候,当时就想搞个自动开启空气净化器,由于种种原因一直没有时间搞,最近终于闲下来了这个事情终于提上议程了,现 ...
- [Oracle]根据字段值全库搜索相关数据表和字段
这个需求比较冷门,但对于在某些特定的情况下,还是会有这样的需要的.好在Oracle实现还比较方便,用存储过程则轻松实现. 查询字符串: create or replace procedure sear ...
- SQL查询 [SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别(比较)] ---转载
@@IDENTITY (Transact-SQL) 返回最后插入的标识值的系统函数. 备注 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的 ...
- rtpdataheader.h
#ifndef RTPDATAHEADER_H #define RTPDATAHEADER_H // For 32bit intel machines typedef short int16; typ ...
- python发布包流程
1.新建文件夹suba和subb,文件夹下新建__init__.py,内容可以为空 2.suba内新建文件aa.py bb.py 3.subb内新建文件cc.py dd.py 4.setup.py文件 ...
- 获取android模拟器的IP地址
http://blog.csdn.net/yjkwf/article/details/7244632 1.输入adb devices查看加载的设备 2.使用 adb -s [设备] [命令]执行命令 ...
- 3.11课·········异常语句与for循环重复
异常语句try catch finally try//保护执行里面的代码段,若其中一句有错误,直接跳转到catch,不会管下面的内容 { Console.Write("请输入一个整数&quo ...
- Android Theme主题
•android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 •android:theme="@and ...
- 纯CSS3实现关闭按钮
在线演示 本地下载