Usaco. Пятница, тринадцатое. Что не так с моим кодом?

Я сделал программу для задачи USACO и теперь просто не могу понять, почему получаю плохой ответ, долго думал почему, и до сих пор не понял. Что могло быть не так?

Задача состоит в том, чтобы подсчитать, сколько раз выпадет 13-е число в субботу, воскресенье, понедельник, вторник, ..., пятницу. Год, когда начинать тестирование - 1900, а последний год указан в текстовом файле.

Вместо этого ответа: 36 33 34 33 35 35 34

Я получаю: 34 33 33 33 36 36 35

Большое спасибо за вашу помощь, я очень ценю ваше время и вашу помощь :)

#include<iostream>
#include<fstream>

using namespace std;

int weekDayCount(int days, int weekDays[], int & currentWeekDay)
{

for(int day = 1; day <= days; day++)
{      
    if(day == 13)
    {
        weekDays[currentWeekDay]++;
    }

    currentWeekDay++;

    if(currentWeekDay == 7) currentWeekDay = 0;
}
}

int main()
{
int currentWeekDay = 0;
int years;

ifstream in("friday.in");

in >> years;

in.close();

int weekDays[7] = {0};

for(int y = 1900; y <= (1900 + years) - 1; y++) // Years
{
    cout << y << endl;

    for(int m = 1; m <= 12; m++) // Months
    {
        if(m == 11 || m == 2 || m == 10 || m == 8) // 30 days
        {
            weekDayCount(30, weekDays, currentWeekDay);
        }
        else if(m == 5) // February
        {
            if(y % 100 != 0 && y % 4 == 0) // If a leap year - 29 days
            {
                weekDayCount(29, weekDays, currentWeekDay);
            }
            else if(y % 100 == 0 && y % 400 == 0) // If a century leap year
            {
                cout << "Leap century: " << y << endl;
                weekDayCount(29, weekDays, currentWeekDay);
            }
            else // 28 days
            {
                weekDayCount(28, weekDays, currentWeekDay);
            }
        }
        else // Else 31 days
        {
            weekDayCount(31, weekDays, currentWeekDay);
        }
    }
}

cout << "Result" << endl;

 cout << weekDays[5] << " " << weekDays[6] << " " << weekDays[0] << " " << weekDays[1] << " " << weekDays[2] << " " << weekDays[3] << " " << weekDays[4] << endl;
}

person user3216599    schedule 20.01.2014    source источник
comment
Как февраль 5-й месяц?   -  person Thomas Matthews    schedule 21.01.2014
comment
Кроме того, как m==2 может иметь 30 дней?   -  person Thomas Matthews    schedule 21.01.2014
comment
Я рекомендую вам научиться пользоваться отладчиком. Это поможет вам в этих ситуациях.   -  person Thomas Matthews    schedule 21.01.2014
comment
Вы хотите сказать, что месяцы с 30 днями - это ноябрь, февраль, октябрь и август?   -  person    schedule 21.01.2014
comment
Вам действительно стоит когда-нибудь заглянуть в календарь. Шутки в сторону. Из 12 месяцев вы ошиблись в 7 из них.   -  person molbdnilo    schedule 21.01.2014
comment
Может, он с другой планеты, понимаете?   -  person    schedule 21.01.2014
comment
@ThomasMatthews Если вы думаете, что это дни каждого месяца, отладчик вообще не поможет.   -  person molbdnilo    schedule 21.01.2014
comment
Спасибо за тех, кто пытается мне помочь. Но я уже отвечал раньше на первый ответ. Тем, кто ненавидит, лучше молчать, чем высмеивать глупую ошибку. Не знаю, что вы пытаетесь сделать со своими ненавистными комментариями   -  person user3216599    schedule 22.01.2014


Ответы (1)


Ваши сравнения месяцев неверны.

Февраль - это 2-й месяц, а не 5-е.
Как и во втором месяце, у него нет 30 дней (по крайней мере, с тех пор, как я жив).

Вы можете поменять местами эти константы.

person Thomas Matthews    schedule 20.01.2014
comment
О, я понял! Такая глупая ошибка, я просто неправильно посмотрел в календаре. Большое спасибо! - person user3216599; 21.01.2014