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;
}


 

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