poj1008

来源:互联网 发布:多益网络老板广州首富 编辑:程序博客网 时间:2024/05/22 22:01
 import java.util.Scanner;


 public class Main {


     public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);
         int times = scan.nextInt();
         System.out.println(times);
         int day;
         int day2;
         int t_day = 0;
         int t_month;
         String month;
         String month2;
         int year;
         int year2;
         int day_num;
         int day_num2;
         for (int i = 0; i < times; i++) {
        //next().默认以" "为标记
        //获得Haab历的日期。
             String str_day = scan.next();
             
             //将字符串形式的日期去掉末尾的.后转化成整形的日期
             day = Integer.parseInt(str_day.substring(0, str_day.length() - 1));
             
             //获得Haab历的月份
             month = scan.next();
             
             //获得Haab的年份
             year = scan.nextInt();
             
             //获得Habb历月份对应的数字
             t_month = getHaabMonth(month);
             
             /**
              * if···else的主要逻辑为:
              * 计算Haab历从今年开始到今天所在月份所过的总天数,用t_day表示
              */
             if(t_month<=18){
            //计算今年过了多少天.(结合实际来理解这里为什么t_month要减一)
                 t_day = (t_month-1) * 20;
             }else{
            //如果t_month是19,则证明之前已经过了18个月,也就360天
                 t_day = 360;
             }
             
             //计算Haab历从时间龙殿开始到现在所过的天数
             day_num = 365 * year  +  t_day + (day + 1);
             
             //计算获得Tzolkin历的年份
             year2 = day_num / 260;
             
             //计算用Tzolkin历表示后,整除年以后所欲的天数
             day_num2 = day_num % 260;
             
             //如果余的天数为0,则证明上一年还没有过完
             if(day_num2 == 0){
                 year2--;
             }
             
             //获得Tzolkin历的日期
             day2 = day_num2 % 13;
             
             //因为Tzolkin历的日期是从1-13的
             //所以需要处理一下
             if (day2 == 0) {
                 day2 = 13;
             }
             
             //获得Tzolkin的月份
             month2 = getTzolkinMonth(day_num2 % 20);
             
             //显示最终结果
             System.out.println(day2 + " " + month2 + " " + year2);
         }
     }


     /**
      * Haab历的月份是字符串,将其转换成数字
      * 这样做是为快乐便于计算今年已经过了的天数
      * @param month
      * @return
      */
     public static int getHaabMonth(String month) {
         if (month.equals("pop")) {
             return 1;
         } else if (month.equals("no")) {
             return 2;
         } else if (month.equals("zip")) {
             return 3;
         } else if (month.equals("zotz")) {
             return 4;
         } else if (month.equals("tzec")) {
             return 5;
         } else if (month.equals("xul")) {
             return 6;
         } else if (month.equals("yoxkin")) {
             return 7;
         } else if (month.equals("mol")) {
             return 8;
         } else if (month.equals("chen")) {
             return 9;
         } else if (month.equals("yax")) {
             return 10;
         } else if (month.equals("zac")) {
             return 11;
         } else if (month.equals("ceh")) {
             return 12;
         } else if (month.equals("mac")) {
             return 13;
         } else if (month.equals("kankin")) {
             return 14;
         } else if (month.equals("muan")) {
             return 15;
         } else if (month.equals("pax")) {
             return 16;
         } else if (month.equals("koyab")) {
             return 17;
         } else if (month.equals("cumhu")) {
             return 18;
         } else if (month.equals("uayet")) {
             return 19;
         } else {
             return 0;
         }
     }


     /**
      * 获得Tzolkin历的天Name(有20个),这样做是为了输出
      * 
      * 
      * Tzolkin中,相对来说我们可以认为,没有月和星期的概念。
      * 由天的id和天的name来唯一标识每一天。
      * 
      * @param month
      * @return
      */
     public static String getTzolkinMonth(int month) {
         if (month == 1) {
             return "imix";
         } else if (month == 2) {
             return "ik";
         } else if (month == 3) {
             return "akbal";
         } else if (month == 4) {
             return "kan";
         } else if (month == 5) {
             return "chicchan";
         } else if (month == 6) {
             return "cimi";
         } else if (month == 7) {
             return "manik";
         } else if (month == 8) {
             return "lamat";
         } else if (month == 9) {
             return "muluk";
         } else if (month == 10) {
             return "ok";
         } else if (month == 11) {
             return "chuen";
         } else if (month == 12) {
             return "eb";
         } else if (month == 13) {
             return "ben";
         } else if (month == 14) {
             return "ix";
         } else if (month == 15) {
             return "mem";
         } else if (month == 16) {
             return "cib";
         } else if (month == 17) {
             return "caban";
         } else if (month == 18) {
             return "eznab";
         } else if (month == 19) {
             return "canac";
         } else if (month == 0) {
             return "ahau";
         } else {
             return "";
         }
     } 
     
     /**
      * 注意Haab历的月份与Tzolkin的月份之间并没有直接转换
      * 整个程序的思路大致为:
      * 先根据Haab历的日期算出总天数,然后在转化成Tzolkin历的日期
      * 
      */
}