P1513 - [蓝桥杯2020初赛] 跑步锻炼 - New Online Judge (ecustacm.cn)
这个题同样的也是一道日期题,暴力就行了,但是我开月份的数组的时候忘记往前面加一个 0 了,导致错了好几次。而且给了你最后的星期,其实是可以验证的。星期就从 6 开始,每一天加一下,然后变成 8 的时候就重新赋值为 1 就行。
代码如下:
#include <bits/stdc++.h>
#define int long long
using namespace std;
// 一三五七八十腊,三十一天
int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
return false;
}
signed main()
{
int ans = 0;
int wenkend = 6;
for (int i = 2000; i <= 2019; i++)
{
for (int j = 1; j <= 12; j++)
{
int day;
if (j == 2 && check(i))
day = mon[j] + 1;
else
day = mon[j];
for (int k = 1; k <= day; k++)
{
if (k == 1 || wenkend == 1)
ans += 2;
else
ans += 1;
wenkend++;
if (wenkend == 8)
wenkend = 1;
}
}
}
for (int i = 1; i <= 9; i++)
{
int day;
if (i == 2 && check(2020))
day = mon[i] + 1;
else
day = mon[i];
for (int j = 1; j <= day; j++)
{
if (j == 1 || wenkend == 1)
ans += 2;
else
ans += 1;
wenkend ++;
if (wenkend == 8) wenkend = 1;
}
}
ans += 2;
cout << wenkend << "\n";
cout << ans << "\n";
return 0;
}