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)。这个题目要求参赛者编写程序,模拟玛雅历法,解决日期转换的问题。 【描述】解题报告通常包含了问题...
11. **日期处理**:这类题目涉及到日历和日期的操作,如Maya Calendar。需要熟悉日期计算、闰年判断等日期处理技巧。 12. **高精度**:高精度计算包括大数的精确计算,如Modular multiplication of polynomials。...
内容概要:本文详细介绍了如何在Matlab中进行常见分布函数的拟合以及KS检验的方法。首先概述了多种常见的概率分布,如正态分布、对数正态分布、伽马分布等。接着,通过具体实例展示了如何使用Matlab内置函数fitdist进行分布拟合,并解释了拟合过程中参数的选择和调整。随后,文章讲解了KS检验的基本概念及其在Matlab中的实现方式,强调了KS检验在验证拟合效果中的重要性。最后,文章鼓励读者进一步探索其他类型的分布,指出不同分布在特定场景下的独特价值。 适合人群:对统计学有一定了解并希望通过Matlab工具深入研究数据分布特征的研究人员、学生和技术爱好者。 使用场景及目标:适用于需要对数据进行概率分布建模和验证的科研项目或数据分析任务。主要目标是帮助读者掌握Matlab环境下进行分布拟合和KS检验的具体操作步骤,提高对不同类型分布的理解和应用能力。 其他说明:文中提供了详细的代码片段作为示例,便于读者动手实践。同时,作者也提醒读者注意KS检验结果的解读,确保所选模型的有效性和合理性。
Python示例源码-编写脚本从Unsplash下载随机图片并设置为壁纸-大作业.zip
内容概要:本文详细介绍了基于FPGA的直方图统计和直方图均衡算法的实现方法。直方图统计用于对图像进行有效的统计分析,而直方图均衡则是一种常见的图像对比度增强算法。文中不仅解释了这两个概念的基本原理,还提供了具体的算法公式和源码示例。特别强调了FPGA的并行计算能力和性能优化技巧,如流水线技术和多像素并行处理,以提升图像处理的速度和效率。此外,文章还展望了FPGA在未来图像处理领域的广泛应用前景,特别是结合深度学习和神经网络技术的可能性。 适合人群:从事图像处理、嵌入式系统开发的技术人员,尤其是对FPGA有一定了解的研究人员和工程师。 使用场景及目标:适用于需要深入了解FPGA在图像处理中的应用,特别是在直方图统计和直方图均衡方面的需求。目标是掌握这两种算法的具体实现方法和技术细节,以便应用于实际项目中。 其他说明:本文不仅提供了理论知识,还包括实用的代码示例,帮助读者更好地理解和实践FPGA在图像处理中的应用。
基于PV-BUS结构的最小功率点跟踪研究.zip
MFCSocket编程专题知识讲座.pptx
Python示例源码-十进制与二进制互转转换器-大作业.zip
excel表格的使用技巧.pptx
Python源码-你好.zip
哈工大CSAPP大作业
阻尼比对串列双圆柱二自由度涡激振动及传热影响的数值研究.zip
模块化多关节绳驱动并联机器人设计.zip
内容概要:本文深入探讨了虚拟电厂(VPP)的日前鲁棒优化调度问题,特别是在源荷双重不确定性背景下。文中介绍了三个基于MATLAB的鲁棒优化调度模型,分别考虑了不同类型的不确定性因素。程序一主要关注虚拟电厂的日前经济调度,通过优化算法确定各个时间段内的燃气轮机出力、购电量、售电量及储能充放电功率等关键参数,以实现最佳经济效益。程序二和程序三在此基础上进一步引入了负荷和光伏的不确定性,提高了调度的鲁棒性和适应性。整个过程中,通过定义目标函数和设置多种约束条件,确保了模型的有效性和实用性。最终,借助MATLAB和CPLEX优化工具箱进行了仿真验证,展示了各机组的出力结果和储能分时电价调度情况。 适合人群:从事电力系统调度、能源管理及相关领域的研究人员和技术人员,尤其是对鲁棒优化方法感兴趣的学者。 使用场景及目标:适用于需要处理源荷双重不确定性的虚拟电厂日前经济调度场景,旨在提升电力系统的经济运行效率和能源利用率,确保调度决策的科学性和可靠性。 其他说明:本文不仅提供了详细的理论分析,还给出了具体的MATLAB代码实现,便于读者理解和实践。此外,文中引用了相关文献,有助于深入了解鲁棒优化模型的具体化简求解过程。
Python源码-数据分析-【 项目:深圳市二手房房价分析及预测 】.zip
Python示例源码-图像格式转换-大作业.zip
大连华铁海兴MES 解决方案介绍.pdf
Python示例源码-Instagram用户资料-大作业.zip
内容概要:本文详细介绍了松下FP-XH六轴标准程序的设计与实现,涵盖点动控制、回零、相对定位、绝对定位等功能。程序采用分块编程方式,结构清晰,注释详尽,确保各轴协同运作精确无误。特别强调了多工位转盘循环控制的应用,以及完善的故障处理机制,如过热保护和柔性故障处理方法。此外,还提到了一些实用的功能,如调试模式和实时扭矩波形显示。 适合人群:从事自动化控制领域的工程师和技术人员,尤其是对多轴转盘控制有需求的专业人士。 使用场景及目标:适用于需要高精度多轴控制的工业应用场景,如生产线、加工中心等。目标是帮助工程师理解和应用松下FP-XH六轴控制系统,提高编程效率和设备运行稳定性。 其他说明:文中提供了具体的代码示例,展示了关键功能的实现细节,有助于读者更好地理解和实践。