當前位置:
首頁 >
NOI 1966 玛雅历
發(fā)布時間:2023/12/18
22
豆豆
生活随笔
收集整理的這篇文章主要介紹了
NOI 1966 玛雅历
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package One;
/*** 07:瑪雅歷
查看 提交 統(tǒng)計 提問
總時間限制: 1000ms 內(nèi)存限制: 65536kB
描述
上周末,M.A. Ya教授對古老的瑪雅有了一個重大發(fā)現(xiàn)。從一個古老的節(jié)繩(瑪雅人用于記事的工具)中,教授發(fā)現(xiàn)瑪雅人使用了一個一年有365天的叫做Haab的歷法。這個Haab歷法擁有19個月,在開始的18個月,一個月有20天,月份的名字分別是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。這些月份中的日期用0到19表示。Haab歷的最后一個月叫做uayet,它只有5天,用0到4表示。瑪雅人認為這個日期最少的月份是不吉利的,在這個月法庭不開庭,人們不從事交易,甚至沒有人打掃屋中的地板。 因為宗教的原因,瑪雅人還使用了另一個歷法,在這個歷法中年被稱為Tzolkin(holly年),一年被分成13個不同的時期,每個時期有20天,每一天用一個數(shù)字和一個單詞相組合的形式來表示。使用的數(shù)字是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 ……也就是說數(shù)字和單詞各自獨立循環(huán)使用。 Haab歷和Tzolkin歷中的年都用數(shù)字0,1,……表示,數(shù)字0表示世界的開始。所以第一天被表示成:
Haab: 0. pop 0
Tzolkin: 1 imix 0
請幫助M.A. Ya教授寫一個程序可以把Haab歷轉(zhuǎn)化成Tzolkin歷。 輸入
Haab歷中的數(shù)據(jù)由如下的方式表示:
日期. 月份 年數(shù) 輸入中的第一行表示要轉(zhuǎn)化的Haab歷日期的數(shù)據(jù)量。下面的每一行表示一個日期,年數(shù)小于5000。
輸出
Tzolkin歷中的數(shù)據(jù)由如下的方式表示:
天數(shù)字 天名稱 年數(shù) 第一行表示輸出的日期數(shù)量。下面的每一行表示一個輸入數(shù)據(jù)中對應的Tzolkin歷中的日期。
樣例輸入
3
10. zac 0
0. pop 0
10. zac 1995
樣例輸出
3
3 chuen 0
1 imix 0
9 cimi 2801解題思路:1 先將輸入的日期轉(zhuǎn)換為距離日期開始點的天數(shù):date = year*365+month*20+天數(shù)?2 根據(jù)date求出Tzolkin日歷格式的年份,月份,天數(shù)year = date/260;date = date%260;數(shù)字=date%13+1; (加1是因為數(shù)字從1開始)天名字下標=date%20;(20個天名字的下標從0到19,根據(jù)計算出的天名字下標就可以得到相應的天名字)
---------------------
思路來自:
https://blog.csdn.net/lijiecsu/article/details/7395402 */
import java.util.HashMap;
import java.util.Scanner;public class NOI1966 {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);HashMap<String, Integer> Haab=new HashMap<>();Haab.put("pop", 1);Haab.put("no", 2);Haab.put("zip", 3);Haab.put("zotz", 4);Haab.put("tzec", 5);Haab.put("xul", 6);Haab.put("yoxkin", 7);Haab.put("mol", 8);Haab.put("chen", 9);Haab.put("yax", 10);Haab.put("zac", 11);Haab.put("ceh", 12);Haab.put("mac", 13);Haab.put("kankin", 14);Haab.put("muan", 15);Haab.put("pax", 16);Haab.put("koyab", 17);Haab.put("cumhu", 18);Haab.put("uayet", 19);String[] tzo={ "imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau" };int n=scanner.nextInt();System.out.println(n);while(n>0){String date=scanner.next();String month=scanner.next();int year=scanner.nextInt();int sum=year*365;int day=Integer.parseInt(date.substring(0, date.length()-1));int yuefen=Haab.get(month);
// sum=(yuefen-1)*20+day+1+ year*365;sum=(yuefen-1)*20+day+ year*365;int tzoYear=sum/260;int ex=sum;sum=sum/260;sum=ex-sum*260;int tzoDay=1;int tzoMon=1;tzoMon=sum%20;tzoDay=sum%13+1;String resMonth=tzo[tzoMon];
// System.out.println("sum: "+sum+" mon:"+tzoMon);System.out.println(tzoDay+" "+resMonth+" "+tzoYear);n--;}}}
總結(jié)
以上是生活随笔為你收集整理的NOI 1966 玛雅历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 50套电子看板,数据大屏设计,数据展示模
- 下一篇: C++程序练习-1008:Maya Ca