这道题思路很简单,就是一个转化的问题,我的思路:
(1)根据给定的第一个日历时间,计算出从开始距今的天数;
(2)根据计算出的天数,再将此转换为第二个日历对应的日期;
(3)输出格式化,一定要注意要输出总的输入数。
题目虽不难,但也wr了好几次,刚开始是忽略了当计算出的天数恰好是第二个日历给对应的一年的最后一天的处理。
还有一个细节是最主要的,最后才发现,在我的代码中,month和day都是求余数所得,所以不可能是20和13,所以当month和day为零时,忘记了将month赋20,以及将day赋13,这个导致我wr了好几次。下面附上自己的代码,供大家参考:
#include<iostream>
#include<string>
using namespace std;
//将dStr转化成对应的整形的日
int StrToDay(string dStr);
//将mStr转化成对应的整形的月
int StrToMonth(string mStr);
//将整数的月转换成相应的字符串
string MonthToStr(int month);
int main()
{
//freopen("in.txt","r",stdin);
int n;
cin>>n;
string dStr,mStr;
int year;
int month;
int day;
cout<<n<<endl;
for(int i=0;i<n;++i)
{
cin>>dStr>>mStr>>year;
day=StrToDay(dStr);
month=StrToMonth(mStr);
int total=0;
total=year*365+month*20+day;
//将年月日转化为所要求的年历
year=total/260;
int temp=total-year*260;
month=temp%20;
day=temp%13;
if(0==temp)
{
cout<<13<<" "<<"ahau "<<(year-1)<<endl;
continue;
}
//注意此处if语句
if(0==day)
day=13;
cout<<day<<" "<<MonthToStr(month)<<" "<<year<<endl;
}
return 0;
}
int StrToDay(string dStr)
{
int day=0;
if("0."==dStr) day=1;
if("1."==dStr) day=2;
if("2."==dStr) day=3;
if("3."==dStr) day=4;
if("4."==dStr) day=5;
if("5."==dStr) day=6;
if("6."==dStr) day=7;
if("7."==dStr) day=8;
if("8."==dStr) day=9;
if("9."==dStr) day=10;
if("10."==dStr) day=11;
if("11."==dStr) day=12;
if("12."==dStr) day=13;
if("13."==dStr) day=14;
if("14."==dStr) day=15;
if("15."==dStr) day=16;
if("16."==dStr) day=17;
if("17."==dStr) day=18;
if("18."==dStr) day=19;
if("19."==dStr) day=20;
return day;
}
int StrToMonth(string mStr)
{
int month=0;
if("pop"==mStr) month=0;
if("no"==mStr) month=1;
if("zip"==mStr) month=2;
if("zotz"==mStr) month=3;
if("tzec"==mStr) month=4;
if("xul"==mStr) month=5;
if("yoxkin"==mStr) month=6;
if("mol"==mStr) month=7;
if("chen"==mStr) month=8;
if("yax"==mStr) month=9;
if("zac"==mStr) month=10;
if("ceh"==mStr) month=11;
if("mac"==mStr) month=12;
if("kankin"==mStr) month=13;
if("muan"==mStr) month=14;
if("pax"==mStr) month=15;
if("koyab"==mStr) month=16;
if("cumhu"==mStr) month=17;
if("uayet"==mStr) month=18;
return month;
}
string MonthToStr(int month)
{
string str="";
//注意此处if语句
if(0==month)
month=20;
switch(month)
{
case 1: str="imix"; break;
case 2: str="ik"; break;
case 3: str="akbal"; break;
case 4: str="kan"; break;
case 5: str="chicchan"; break;
case 6: str="cimi"; break;
case 7: str="manik"; break;
case 8: str="lamat"; break;
case 9: str="muluk"; break;
case 10: str="ok"; break;
case 11: str="chuen"; break;
case 12: str="eb"; break;
case 13: str="ben"; break;
case 14: str="ix"; break;
case 15: str="mem"; break;
case 16: str="cib"; break;
case 17: str="caban"; break;
case 18: str="eznab"; break;
case 19: str="canac"; break;
case 20: str="ahau"; break;
default:
break;
}
return str;
}
给大家附上一个测试用例:
input:
4. uayet 259
output:
13 ahau 364