POJ 1008 Maya Calendar
这道题,让我一开始就想用“Java 的方式”去写,呵呵,所以就建了一个新类去处理它。
然后用到一些枚举类的特性,如 Enum.ordinal() 来获得枚举类的位置信息,Enum.values()[Enum.ordinal()] 来反向获得一个数值所对应的枚举类型。这样,就巧妙的借助枚举类来处理了月份。
本来想实现一个更完整的 MayaCalendar 类,不过考虑与本题无关,且有些算法没弄明白,所以暂时放弃了。在“问答”处提了个问题,是我期望解决但一时没解决的问题。希望有高手能帮忙解答一下,谢谢。
本题代码如下:
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public void run() throws Exception {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
scan.nextLine();
System.out.println(n);
while (n-- > 0) {
int day = (int) scan.nextDouble(); // 此处故意将输入理解为 double,免去了转换的过程
String mon = scan.next();
int year = scan.nextInt();
scan.nextLine();
MayaCalendar mc = new MayaCalendar(day, mon, year);
System.out.println(mc.getTzolkin());
}
}
public static void main(String[] args) {
Main m = new Main();
try {
m.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class MayaCalendar {
private long days;
public MayaCalendar(int day, String mon, int year) {
this(day, Haab.valueOf(mon).ordinal(), year);
}
/**
* Parse Haab calendar.
* TODO Error check.
*
* @param day base on 0
* @param mon base on 0
* @param year base on 0
*/
public MayaCalendar(int day, int mon, int year) {
days = 1; // all input is 0, means one day.
days += day;
days += mon * 20;
days += year * 365;
}
public String getTzolkin() {
StringBuffer sb = new StringBuffer();
int num = (int) days % 13;
if (num == 0) num = 13;
sb.append(num);
sb.append(" ");
int token = (int) days % 20;
if (token == 0) token = 20;
sb.append(Tzolkin.values()[token - 1]);
sb.append(" ");
int year = (int) Math.ceil(days / 260f);
sb.append(year - 1);
return sb.toString();
}
public long getDays() {
return days;
}
}
enum Haab {
pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu, uayet;
}
enum Tzolkin {
imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau;
}
分享到:
相关推荐
For religious purposes, the Maya used another calendar in which the year was called Tzolkin (holly year). The year was divided into thirteen periods, each 20 days long. Each day was denoted by a pair ...
【标题】"POJ1008-Maya Calendar"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。这个题目要求参赛者编写程序,模拟玛雅历法,解决日期转换的问题。 【描述】解题报告通常包含了问题...
POJ1008是一个经典的编程竞赛题目,它涉及到玛雅历法与Tzolkin历法之间的转换。在这个问题中,我们需要利用数据结构和编程语言的知识来实现算法,以解决这个时间转换的挑战。本文将围绕这一主题,深入探讨如何使用...
标签"poj poj_27 poj27 poj2775"进一步确认了这是一道关于POJ平台的编程挑战,其中"poj_27"可能是表示第27类问题或者某种分类,而"poj27"可能是对"poj2775"的简写。 压缩文件中的"www.pudn.com.txt"可能是一个链接...
【标题】"POJ.rar_poj java_poj1048" 涉及的知识点主要围绕编程竞赛中的“约瑟夫环”问题,这里是一个加强版,使用Java语言进行解决。 【描述】"POJ1048,加强版的约瑟夫问题 难度中等" 提示我们,这个问题是编程...
【标题】"POJ2002-Squares"是一个经典的计算机编程题目,源自北京大学的在线判题系统(POJ,即PKU Online Judge)。这个题目主要涉及到算法设计和实现,尤其是数学和动态规划方面的知识。 【描述】"解题报告+AC代码...
标题中的"jihe.rar_2289_POJ 3714_poj3714_poj3714 Ra_visual c" 提到了一个压缩文件,可能包含有关编程竞赛或算法解决的资源,特别是与POJ(Problem On Judge)平台上的问题3714相关的。"Ra_visual c"可能指的是...
【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...
【标题】"POJ1159-Palindrome" 是北京大学在线编程平台POJ上的一道编程题目。这道题目主要考察的是字符串处理和回文判断的知识点。 【描述】"北大POJ1159-Palindrome 解题报告+AC代码" 暗示了解决这道问题的方法和...
标题“POJ3253-POJ3253-Fence Repair【STL优先队列】”指的是一个在线编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Online Judge)。该题目要求参赛者使用C++编程语言解决特定的问题,并且在解决方案中...
标题 "ACM.zip_ACM_poj_poj3187_poj3669" 提供的信息表明,这个压缩包包含的是与ACM(国际大学生程序设计竞赛)相关的编程题目解决方案,具体是POJ(Programming Online Judge)平台上的两道题目,编号分别为poj3187...
标题中的"string-problem(POJ).rar_POJ 19_poj"表明这是一个与ACM编程竞赛相关的压缩包,特别关注的是字符串处理问题。在ACM编程竞赛中,字符串问题是一个常见的类别,通常涉及到字符串的查找、比较、操作、模式匹配...
* 图的深度优先遍历和广度优先遍历:图的深度优先遍历和广度优先遍历是指遍历图的两种方式,如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 * 最短路径算法:最短路径算法是指计算图中两点之间的最短...
在编程竞赛中,POJ(Problemset Online Judge)是一个知名的在线判题系统,用于检验和提交程序解决问题的能力,而OI(OnlineJudge)是这类系统的统称。下面将对每个文件名中的题目和相关算法进行详细解释。 1. **P...
根据给定的文件信息,我们可以总结出一份详细的IT知识训练计划,主要针对编程竞赛和算法学习,特别是聚焦于POJ(Problem Online Judge)平台上的题目训练。这份计划分为两个阶段,初级阶段和中级阶段,共计涉及了165...
【标题】"POJ题目简单分类(ACM)" 涉及的知识点: 【描述】中的"学习起来更系统,更清爽"暗示了本话题旨在为ACM竞赛初学者提供一个有条理的学习路径。 【标签】"POJ 分类"表明我们将探讨的是基于POJ(Problemset On...
标题中的“非常全的poj答案库 1164-1874 1000-4007”表明这是一个包含大量POJ(Problem Online Judge)编程竞赛题目解决方案的资源集合。POJ是北京大学主办的一个在线编程平台,它提供了一系列的编程题目供参赛者...
【标题】"POJ1753.rar_poj 1753_poj1753" 提供的资源是关于POJ1753编程挑战的解决方案,其中包括了完整的代码实现以及实验报告。POJ(Problem Online Judge)是中国大学常用的在线编程竞赛平台,它提供了一系列的...