Usaco. Friday the thirteen. What is wrong with my code?

丶灬走出姿态 提交于 2019-12-25 18:52:13

问题


I've made a program for the USACO task and now I just can't figure out why I'm getting the bad answer, I've been thinking why for a long time and still didn't figure it out. What could be wrong?

The task is to count the number of times the 13th falls on Saturday, Sunday, Monday, Tuesday, ..., Friday. The year from when to test is 1900 and the last year is given in the txt file.

Instead of this answer: 36 33 34 33 35 35 34

I'm getting: 34 33 33 33 36 36 35

Thank you very very very much for you help, I really apreciate your time and your help :)

#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;
}

回答1:


Your month comparisons are not correct.

February is the 2nd month, not the 5th.
As the second month, it doesn't have 30 days (at least since I've been alive).

You may want to swap those constants.



来源:https://stackoverflow.com/questions/21243273/usaco-friday-the-thirteen-what-is-wrong-with-my-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!