日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 1008 玛雅日历

發(fā)布時間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 1008 玛雅日历 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 72250 Accepted: 22225

描述

瑪雅文明使用365天的年歷,稱為Haab歷法,有19個月,前18個月都是20天,月名為: pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu.不考慮月名,每個月中,每天標記為0,1,… , 19.Haab的最后一個月稱為uayet ,每天標記為0,1,2,3,4。瑪雅人相信這個月是不幸的。

出于宗教目的,瑪雅使用另一種日歷,一年稱為Tzolkin (holly year)。一年被分為13個區(qū)間,每個區(qū)間20天。每天被標記為(day_number,day_name)使用13個day_number(數(shù)字1~13)和20個day_name分別為: imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau ;(day_number和day_name同時循環(huán))

請注意每一天都有明確的描述,例如:
在年初具有如下表示:
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, 繼續(xù)進入下個20循環(huán) 8 imix, 9 ik, 10 akbal …

在Haab和Tzolkin的中,年都被數(shù)組0,1,…,標記,數(shù)字0是世界的開始。因此,第一天是:
Haab: 0. pop 0
Tzolkin: 1 imix 0
編寫一個程序,將日期從Haab轉換為Tzolkin

輸入

Haab日期輸入的格式:NumberOfTheDay. Month Year
第一行是輸入的日期的個數(shù),之后的n行包含n個Haab日期,輸入的年小于5000.

輸出

Tzolkin日期輸出的格式:Number NameOfTheDay Year
第一行是輸出的日期的個數(shù),之后的n行包含n個Tzolkin日期,輸出的順序對應輸入的日期

輸入樣例

3
10. zac 0
0. pop 0
10. zac 1995

輸出樣例

3
3 chuen 0
1 imix 0
9 cimi 2801

思路:

從世界開始時經(jīng)歷的總天數(shù)sumday
sumday=年*365+月份*20+日+1,
其中,
年:是輸入的年份,因為從0開始計數(shù),所以已經(jīng)默認減去1
月份:由于存在數(shù)組中,數(shù)組的下表從0開始計數(shù),所以已經(jīng)默認減去1
日:由于輸入的日從0開始計數(shù),所以應該+1則為真實的天數(shù)
結果的天數(shù)是sumday%13,如果結果為0則輸出13(Tzolkin的13循環(huán)從1開始計數(shù))
結果的天名是sumday%20,如果結果為0則對應的是第20天,只要處理一下天名的數(shù)組,將第20天放在下標0處即可。
結果的年份是sumday/260,注意!是當給出的sumday恰好是260時,輸出年份是0年,此時正確,但如果是是260的2倍或者以上倍數(shù),即:
sumday == x*260 (x>1, x為整數(shù)),
則輸出年份應為x-1。
所以經(jīng)過統(tǒng)一的處理:輸出的Tzolkin日歷的年份應為:
(sumday-1)/260

c++實現(xiàn)

#include <iostream> #include <string.h> #include <stdio.h>using namespace std;const char hmonth[19][10] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin","mol", "chen", "yax", "zac", "ceh", "mac", "kankin","muan", "pax", "koyab", "cumhu","uayet"}; const char tzday[20][10] = { "ahau","imix", "ik", "akbal", "kan","chicchan", "cimi", "manik", "lamat", "muluk", "ok","chuen", "eb", "ben", "ix", "mem", "cib", "caban","eznab", "canac"};//把第20天放在第0個位置,因為取余運算結果為0時表示第20天 int find_month(char* month){for(int i = 0; i <20; i++){if(!strcmp(month, hmonth[i])){return i;//hmonth在數(shù)組中從0開始計數(shù)}}return -1; }int main() {int ncase;cin >> ncase;cout << ncase << endl;int day,year;char month[10];//存放月份名for(int i = 0; i < ncase; i++){scanf("%d. %s %d", &day, &month, &year);int imonth = find_month(month);//月份對應的數(shù)字已經(jīng)減去1int sumday = year*365+imonth*20+day+1;//day從0開始計數(shù)int tyear = (sumday-1)/260;//當年份為260的2倍及以上整數(shù)倍時,不-1則輸出多了1年int tday = sumday%13;if(tday==0)tday=13;int tmonth = sumday%20;cout<< tday << " " << tzday[tmonth] << " " << tyear << endl;}return 0; }

參考

http://blog.csdn.net/shaw1994/article/details/12308965
http://www.cnblogs.com/ay27/archive/2013/02/24/2924012.html

總結

以上是生活随笔為你收集整理的POJ 1008 玛雅日历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。