USACO.星期五十三.我的代码有什么问题

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

本文关键字:什么 问题 代码 我的 五十三 USACO      更新时间:2023-10-16

我已经为USACO任务制作了一个程序,现在我无法弄清楚为什么要得到不好的答案,我一直在思考为什么很长一段时间仍然没有弄清楚。怎么了?

任务是计算周六,周日,星期一,星期二,...,星期五的13次跌倒的次数。从何时到测试的年份为1900年,最后一年在TXT文件中给出。

而不是这个答案: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;
}

您的月比较不正确。

2月是第二个月,而不是第五个月。
作为第二个月,它没有30天(至少以来我还活着)。

您可能想交换那些常数。