POJ1008:Maya Calendar

来源:互联网 发布:php大型项目框架 编辑:程序博客网 时间:2024/06/08 09:45

题意:玛雅人有两种历法:第一种:一年有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;}


 

原创粉丝点击