POJ 1008/Maya Calendar

一道水題,竟然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;
}


發佈了76 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章