/*
Memory 457K Time 0MS
*/
#include <stdio.h>
#include <string.h>
#define YEAR_SIZE 10000
int main()
{
///玛雅日历的19个月,前18个月每个月20天。使用0-19来表示。 玛雅日历一年365天
char Maya[][10] = { "pop","no","zip","zotz","tzec","xul","yoxkin","mol",
"chen","yax","zac","ceh","mac","kankin","muan","pax",
"koyab","cumhu","uayet"
};
///东青年每年13个月用1-13表示,每个月20天,使用下面的名字表示天。冬青年也就是一年260天。
///两个周期表示的是在一个月份内,周期循环两次
char Tzolkin[][10] = { "imix","ik","akbal","kan","chicchan","cimi","manik","lamat",
"muluk","ok","chuen","eb","ben","ix","mem","cib","caban","eznab",
"canac","ahau"
};
///冬青日每个月份开头的数字,冬青年有13个月
int TzolKinMonthBeginNumber[] = {1,8,2,9,3,10,4,11,5,12,6,13,7};
///年数用 0,1,2,3....表示
///玛雅日历的世界开始年为 0. pop 0
///冬青年 世界开始为 1 imix 0
char monthOfMaya[YEAR_SIZE][10];
char dayOfTzolkin[YEAR_SIZE][10]; //玛雅月份和冬青日份
int n;
int yearOfMaya[YEAR_SIZE],yearOfTzolkin[YEAR_SIZE]; //玛雅年份和冬青年份
int monthOfTzolkin[YEAR_SIZE];
float dayOfMaya[YEAR_SIZE]; //冬青月份和玛雅日份。获取玛雅日份时忽略.
int i,j,index;
int daysOfPast;
int month,days;
scanf_s("%d", &n);
for (i = 0; i < n; ++i)
{
scanf("%f %s %d", &dayOfMaya[i], &monthOfMaya[i], &yearOfMaya[i]);
///进行转换为冬青年
//1.计算出玛雅年过去的天数
//1.1 换算为具体的日期
for (j = 0; j < 19; ++j) //换算月分
if (strcmp(monthOfMaya[i], Maya[j]) == 0)
break;
//j的值加1就是月分
daysOfPast = dayOfMaya[i] + j * 20 + yearOfMaya[i] * 365; //年数乘每年的天数 加上月份 * 每月天数 + 当前日期
///冬青年的年份
yearOfTzolkin[i] = daysOfPast / 260;
///冬青年的月份。冬青年没有所谓的月份,但是区分每个月可以得到每个月开头的起始值
month = (daysOfPast - yearOfTzolkin[i] * 260) / 20 ; //表示月份。依靠该变量来作为冬青年月份开头数字的下标
days = daysOfPast - yearOfTzolkin[i] * 260 - month * 20; //表示当月的天数
index = (TzolKinMonthBeginNumber[month] + days) % 13; //对于周期性的天数 因为每个周期为13个数字
if (index == 0) //如果取模13 为0,表示当前天数就是13
{
index = 13;
}
monthOfTzolkin[i] = index; //表示月份的数字
strcpy(dayOfTzolkin[i], Tzolkin[days]); //获取表示日期的名字
}
printf_s("%d\n", n);
for (i = 0; i < n; ++i)
{
printf_s("%d %s %d\n", monthOfTzolkin[i], dayOfTzolkin[i], yearOfTzolkin[i]);
}
return 0;
}
03-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交