洛谷题解:UVA300 Maya Calendar

题目传送门。

题意


有两种历法 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;
}

完结撒花。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值