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 ...
随机推荐
- POJ 1068 Parencodings【水模拟--数括号】
链接: http://poj.org/problem?id=1068 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27454#probl ...
- 九度OJ 1251:序列分割 (DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:166 解决:34 题目描述: 一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值 比如{3,2,4,3,6} 可以分成{ ...
- php自定义函数: amr转mp3格式
<?php function amr2mp3($file){ if (file_exists($file . '.mp3') == true) { return; } else { $param ...
- Webpack探索【1】--- 基础知识
本文主要说明Webpack的一些基础内容.
- Spring注解式与配置文件式
http://tom-seed.iteye.com/blog/1584632 Spring注解方式bean容器管理 1.通过在配置文件中配置spring组件注入 <context:compone ...
- onActivityResult方法不执行,什么原因?
原因: public void OnOpenPlayersActivity(View view) { Intent intent = new Intent(); intent.setClass(g ...
- Spring笔记:IOC基础
Spring笔记:IOC基础 引入IOC 在Java基础中,我们往往使用常见关键字来完成服务对象的创建.举个例子我们有很多U盘,有金士顿的(KingstonUSBDisk)的.闪迪的(SanUSBDi ...
- rest-client restclient get post写法
get url = "https://api.weixin.qq.com/sns/jscode2session" data = { appid: "××××", ...
- [原创]java WEB学习笔记29:Cookie Demo 之自动登录
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- my.cnf重要配置参数说明
不同存储引擎中关键参数优化 MyISAM存储引擎 MyISAM存储引擎适用于读多写少,对读性能要求比较高的系统 官方文档:http://dev.mysql.com/doc/refman/5.6/en/ ...