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 ...
随机推荐
- zoj 3716 Ribbon Gymnastics【神奇的计算几何】
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3716 来源:http://acm.hust.edu.cn/vjudg ...
- elasticsearch从入门到出门-02-简单的CRUD
操作背景: 电商网站上面的一个商品的增删改查: es 能接受的都是JSON格式的数据 Es 提供了一套简单的集群信息健康监控的api GET /_cat/health?v epoch t ...
- mysql语句, 空的 order by , 空的 where
SQL语句里, 空的 where, where 1 AND status=1 空的 order by, order by null, updatetime desc 这种空值的情况, 是很有用处的: ...
- 洛谷P2402 奶牛隐藏
洛谷P2402 奶牛隐藏 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛混乱的原因看题目描述) 题目描述 在一个农场里有n块田地. ...
- ORM性能相关
model: 先给一个简单的表结构 from django.db import models class User(models.Model): username=models.CharField(m ...
- 我的Android进阶之旅------>HTTP Header 详解
HTTP(HyperTextTransferProtocol)即超文本传输协议,目前网页传输的的通用协议.HTTP协议采用了请求/响应模型,浏览器或其他客户端发出请求,服务器给与响应.就整个网络资源传 ...
- HDU 5355 Cake (WA后AC代码,具体解析,构造题)
题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5355 题面: Cake Time Limit: 2000/1000 MS (Java/Others) ...
- JQuery 双击动态编辑
$(this).append(input); $("input#temp").focus(); $("inp ...
- HDU - 5695 Gym Class 【拓扑排序】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5695 思路 给定一些关系 进行拓扑排序 但是有一个要求 对于哪些没有确切的位置的点 要按照ID大小 I ...
- vim有用的快捷键
多行前插入字符: ctrl + v (进入列模式,选上要插入的行) shift + i 输入要统一插入的字符 esc (虽然从外面看着是只有一行插入了,但是按下esc后就会发现之前选的都插入了 删除多 ...