首页 > 代码库 > POJ-1008 Maya Calendar
POJ-1008 Maya Calendar
【题目描述】
将Haab历法的日期转化为Tzolkin历法,前者一年365天,后者一年260天。(简直比我们的历法转换还简单,都没闰年!)
【思路分析】
简单的思路就是将Haab历法的日期转换成从第一天开始的总天数,再转换成Tzolkin历法。由于最大年份为5000年,乘上365天也不会使int型越界,所以放心转吧。
做题过程中主要复习的知识点是:
1. STL中map的用法:
map<string, int> HaabMonth; // 定义HaabMonth.insert( pair<string,int>("pop", 0) ); // 插入HaabMonth[hmonth] = 100; // 查找及修改HaabMonth.erase("ok"); // 删除// 另一种查找方式HaabMonth::iterator iter = HaabMonth.find("ok");if (iter == HaabMonth.end()) { ... // 则没有找到}// 遍历方法for (HaabMonth::iterator iter = HaabMonth.begin(); iter != HaabMonth.end(); ++iter){ ... }
2. string 与 char* 的转换:
string到char*,string.c_str();char*到string,直接赋值string = char*;
另外:string转数字,用string.c_str() + atoi, atof…;
数字转string,用sprintf(char[], “%d”, int); 再将char*赋值给string;
【附:完整源码】
/** POJ-1008 Maya Calendar*/#include <iostream>#include <map>#include <string>using namespace std;void BuildCalendarMonth(map<string,int> &hm){ hm.insert( pair<string,int>("pop", 0) ); hm.insert( pair<string,int>("no", 20) ); hm.insert( pair<string,int>("zip", 40) ); hm.insert( pair<string,int>("zotz", 60) ); hm.insert( pair<string,int>("tzec", 80) ); hm.insert( pair<string,int>("xul", 100) ); hm.insert( pair<string,int>("yoxkin", 120) ); hm.insert( pair<string,int>("mol", 140) ); hm.insert( pair<string,int>("chen", 160) ); hm.insert( pair<string,int>("yax", 180) ); hm.insert( pair<string,int>("zac", 200) ); hm.insert( pair<string,int>("ceh", 220) ); hm.insert( pair<string,int>("mac", 240) ); hm.insert( pair<string,int>("kankin", 260) ); hm.insert( pair<string,int>("muan", 280) ); hm.insert( pair<string,int>("pax", 300) ); hm.insert( pair<string,int>("koyab", 320) ); hm.insert( pair<string,int>("cumhu", 340) ); hm.insert( pair<string,int>("uayet", 360) );}int main(){ map<string, int> HaabMonth; BuildCalendarMonth(HaabMonth); string TzolkinMonth[20] = {"imix", "ik", "akbal", "kan", "chicchan", "cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem", "cib", "caban", "eznab", "canac", "ahau"}; int n; cin>>n; cout<<n<<endl; for (int i(0); i < n; i++) { int hday, hyear, hmonthdays; char temphmonth[10]; string hmonth; scanf("%d. %s %d", &hday, temphmonth, &hyear); hmonth = temphmonth; hmonthdays = HaabMonth[hmonth]; int totalDays = hyear * 365 + hmonthdays + hday; // 转化Tzolkin历法 int tyear = totalDays / 260; int totalDaysInOneYear = totalDays % 260; int tmonthno = totalDaysInOneYear % 20; string tmonth = TzolkinMonth[tmonthno]; int tday = totalDaysInOneYear % 13 + 1; cout<< tday <<" "<< tmonth <<" "<< tyear <<endl; } return 0;}
POJ-1008 Maya Calendar
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。