题意
有两种历法 Haab 和 Tzolkin,给出 Haab 历法的表示方法,要求我们输出 Tzolkin 对应的表示方法。
分析
其实一开始看到这两种历法我也是一头雾水。
但是上网查了一下,就了解许多了:
于是我们根据查出的资料来做题:
1、每一次循环 Haab 历法,找出和输进来的相对应的,然后转换为正常日期。
2、转换成 Tzolkin 历法输出对应数值即可。
Code
// UVA300.Maya Calendar
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 25;
char ch, m[N];
int n, d, y, ans;
// 通过上网查询,记录两个历法的表示方法
char Haab[N][N] = {"pop", "no", "zip", "zotz", "tzec", "xul", "yoxkin", "mol","chen", "yax", "zac", "ceh", "mac", "kankin", "muan", "pax", "koyab", "cumhu","uayet"};
char Tzolkin[N][N] = {"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik","lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban","eznab", "canac", "ahau"};
int main() {
scanf ("%d", &n);
// 通过观察和推导可以发现,两种历法的表示方法 n 相等
printf ("%d\n", n);
for (int i = 1; i <= n; i++) {
// 输入数据,细节注意,使用 cin,不然会输进空格和换行
cin >> d >> ch >> m >> y;
// 循环 20 种 Haab 日期的表示方法
for (int j = 0; j < 19; j++) {
// 找到对应的日期
if (strcmp(m, Haab[j]) == 0) {
// 转换成正常的日期
ans = y * 365 + j * 20 + d;
break;
}
}
// 转换成 Tzolkin 日期,输出
printf ("%d %s %d\n", ans % 13 + 1, Tzolkin[ans % 20], ans / 260);
}
return 0;
}
完结撒花。