本文主要是介绍POJ 1008 玛雅日历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:玛雅使用两种日历,第一种称为Haab,一年为365天,一年分为19个月,前18个月每个月都是20天,第19个月为5天,每一个月都有一个名字,分别为pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu和uayet,每个月份中的天数用0到19表示。最后一个月份中的天数用0到4表示。玛雅使用的第二个日历称为Tzolkin,在这个日历中,一年为260天,一年分为13段,每段20天(260=13*20),每一天用一个数字和一个名字表示,总共20个名字: imix, ik, akbal, kan, chicchan, cimi, manik, lamat, muluk, ok, chuen, eb, ben, ix, mem, cib, caban, eznab, canac, ahau,数字为1到13,数字和名字都顺序循环,例如,第一年开始的几天为: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。。。
现在的任务是要将一个Haab日历格式的日期转换为Tzolkin日历格式的日期。年份从0开始,从日期开始点开始,第一天在两种日历中分别为:
Haab:0. pop 0
Tzolkin: 1 imix 0
输入:输入的日期为Haab日历格式,第一行输入日期的个数,第二行开始输入日期。输入日期的格式为:
天数.月份 年份 例如: 10. zac 0,天数和年份都从0开始
输出:输出的日期为Tzolkin日历格式。第一行输出日期的个数,第二行开始输出Tzolkin格式的日期,输出日期的格式为:
数字 天名字 年份 例如:3 chuen 0, 数字为1到13,年份从0开始。
思路:就是转换计算问题。这题容易,一次性提交通过,所以不说那么多了,不过输入要特别注意的是天数后面要输入一个英文的句号,我提交之前看到的,不然提交就不过了,这点需要特别注意,其他的挺容易的,也没有什么算法可言,只是简单的数学计算。
代码如下:
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
char mon1[20][10]={"pop","no","zip","zotz","tzec","xul","yoxkin","mol","chen","yax","zac","ceh","mac","kankin","muan","pax","koyab","cumhu","uayet"};
char mon2[21][10]={"imix","ik","akbal","kan","chicchan","cimi","manik","lamat","muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab","canac","ahau"};
int n,i;
cin>>n;
cout<<n<<endl;
for(i=0;i<n;i++)
{
int date,year,day,j;
char c;
string mon;
scanf("%d%c",&day,&c);
cin>>mon>>year;
for(j=0;j<19;j++)
if(mon==mon1[j]) break;
date=j*20+day+year*365;
day=date%13+1 ;
year=date/260;
j=date%20;
cout<<day<<' '<<mon2[j]<<' '<<year<<endl;
}
return 0;
}
这篇关于POJ 1008 玛雅日历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!