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 解题报告+AC代码
poj1008,解题报告,把玛雅历转化Tzolkin历
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
Poj中一些题目的源代码,里面共有二十多道题目,OI
很多的POJ题目答案!1000~1008,1011~1014,1016,1017,1019,1028,1032,1045,1046,1047,1050,1061,1067,1068,1088,1102,1159,1163,1183,1207,1218,1226,1247,1256,1258,1298,1316,1323,...
北大POJ1159-Palindrome 解题报告+AC代码
解决算法问题 poj1082, poj1150, poj1180, poj1201, poj1222,代码完成所给题目要求。
北大POJ2002-Squares 解题报告+AC代码
如果你为在poj上找不到解题思路而痛苦,那么这本书可以为你带来惊喜,里面包括了poj上一部分题解题报告~
POJ上的一道题目,自己写的代码,因为想下载别人的, 所以就放上了。
北大POJ1426-Find The Multiple【BFS+同余模】 解题报告+AC代码
POJ1048,加强版的约瑟夫问题 难度中等
主要是POJ的部分题目的代码 主要是POJ的部分题目的代码 主要是POJ的部分题目的代码 主要是POJ的部分题目的代码 主要是POJ的部分题目的代码
poj训练 c语言poj训练 西工大 poj 100题。
在进行ACM编程训练时做字符串专题的一些题目(POJ1782,POJ1790,POJ1951,POJ2003,POJ2121)