POJ1008:Maya Calendar

題意:瑪雅人有兩種曆法:第一種:一年有365天,分爲19個月,前18個月每月有20 天,最後一個月有5天,每個月的名字非別爲:pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu,uayet。每個月天數從0開始,即前18個月0-19,第19個月是0-4.

第二種: 把一年分爲13 個階段,分爲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。循環。

先輸入第一種曆法,輸出第二種曆法。

解題方法:這道題是數學問題。只要計算出第一種曆法距離第一天的總天數sum。那麼第二種曆法的天數爲sum%13+1。月份爲sum%20。年數sum/260.

#include <iostream>
#include <string>
using namespace std;
string a[19] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan","pax", "koyab", "cumhu","uayet"};
string b[20] = {"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
int sum[19] = {0} ;
void init()
{
    int i;
    for(i = 1 ; i < 19 ; i ++)
        sum[i] = sum[i-1] +20 ;
}
int main()
{
    int t , m , n ,sum1 ;
    char c;
    string s;
    cin >> t ;
    int k = t ;
    init();
    cout << k << endl ;
    while(t--)
    {
        sum1 = 0 ;
        cin >> m ;
        cin >> c ;
        cin >> s ;
        cin >> n ;
        int i ;
        for(i = 0 ; i < 19 ; i ++)
        {
            if(a[i]==s)
                sum1 = m + sum[i] + n * 365 ;
        }
        cout << sum1 % 13 + 1 << " " << b[sum1 % 20] << " " << sum1 / 260 << endl ;
    }
    return 0;
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章