一道水題,竟然WA了快10次了,究其原因就是問題沒有徹底查清楚就斷然提交!
導致一直WA的問題就是在計算Tzolkin年份的時候,邊界沒有考慮到,直接以totalDays/260得出年份,這樣計算直接導致的錯誤就是當totalDays=260時,會輸出年份爲1,而事實上是0年的最後一天,應該輸出年份爲0。
附代碼:
#include <iostream>
#include <string>
using namespace std;
const string haabMonthNames[] = {"pop", "no", "zip", "zotz", "tzec", "xul",
"yoxkin", "mol", "chen", "yax", "zac", "ceh", "mac", "kankin", "muan",
"pax", "koyab", "cumhu","uayet"};
const string hollyMonthNames[] = {"imix", "ik", "akbal", "kan", "chicchan",
"cimi", "manik", "lamat", "muluk", "ok", "chuen", "eb", "ben", "ix", "mem",
"cib", "caban", "eznab", "canac", "ahau"};
int GetMonth(const string name)
{
for(int i = 0; i <= 18; ++i)
if( name == haabMonthNames[i] )
return i;
return -1;
}
string GetMonthName(int i)
{
return hollyMonthNames[i];
}
int main()
{
int n;
cin >> n;
cout << n << endl;
int totalDays = 0;
int day, year;
char dot;
string monthName;
for(int i = 0; i < n; ++i)
{
cin >> day >> dot ;
cin >> monthName >> year;
totalDays = day + GetMonth(monthName)*20 + year*365;
cout << totalDays%13 + 1 << " " ;
cout << hollyMonthNames[totalDays%20] << " ";
totalDays += 1;
cout << totalDays/260 - (totalDays%260?0:1) << endl;
}
return 0;
}