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 ...
随机推荐
- 1.设计模式-------Iterator
本文主要是参考<图解设计模式>写的读书笔记: 开发中我用到遍历集合时候,无非我常用的就是简单的for循环,foreach,iterator 这三种方式进行遍历! 当然这三种的效率: 学习I ...
- 【JavaScript专题】--- 立即执行函数表达式
一 什么是立即执行函数表达式 立即执行函数表达式,其实也可以叫初始化函数表达式,英文名:IIFE,immediately-inovked-function expression.立即执行函数表达式就是 ...
- [luogu3601]签到题
[luogu3601]签到题 luogu 求\[\sum_{i=l}^ri-\phi(i)\] 一个朴素的想法是枚举l~r,根号求\(\phi\),显然这样是\((r-l)\sqrt r\),时间无法 ...
- 12.Django数据库操作(执行原生SQL)
1.使用extra方法 解释:结果集修改器,一种提供额外查询参数的机制 说明:依赖model模型 用在where后: Book.objects.filter(publisher_id="1& ...
- c++得到本地username和IP
bool CDlgResetAlarmInfo::GetLocalUserNameAddIP(CString &a_lstrUserName ,CString &a_IpStr) { ...
- window 上创建 .gitignore文件
由于 git默认不上传空文件夹,如果需要上传空文件夹,那么需要这样上传空文件,官方给出这样的做法~~ (需要创建.gitignore文件) 在linux 上比较好操作了,这里说下在window 上 创 ...
- scala语法解析(解码指环)
看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.
- python2 生成验证码图片
使用pillow或者pil库编写 #coding:utf-8 #use pillow or pil try: from PIL import Image, ImageDraw, ImageFont, ...
- linux清空屏幕
linux清空屏幕 clear ctrl+L reset也是真正的清空终端屏幕,这个命令执行起来有点慢,但它的兼容性显然比之前的那个好,在终端控制错乱时非常有用
- ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)
1.首先检测支付账户是否开通快捷支付服务,如果开通后,那么公钥是否上传(支付宝问题一定要找支付宝客服解决,找其他人没有用,支付宝客服可以帮你分析底层原因) 2.修改app配置文件:alipay_cal ...