問題の説明
Xiaolanは毎日運動しています。
-
通常の状況では、Xiaolanは毎日1キロ走っています。
-
月曜日または月の初め(1日)の場合、やる気を起こさせるために、小欖は2キロ走ります。
-
月曜日または月の初めでもある場合、Xiaolanも2km走行します。
Xiaolanは、2000年1月1日土曜日(包括的)から2020年10月1日木曜日(包括的)まで、長い間稼働しています。
この期間に小欖は何キロ走りましたか?
回答提出
これは、空欄に結果を記入する質問です。結果を計算して提出するだけです。
この質問の結果は整数です。回答を送信するときは、この整数のみを入力してください。余分なコンテンツを入力すると、スコアを付けることができなくなります。
回答:8879
回答:
解题思路
:
0 ~ 6
を表すために使用し周一 至 周日
ます;- 経過日数
sum
を表す2000年1月1日
ために使用され某年某月某日
ます。 2000年1月1日
土曜日以降、useは週(sum + 5) % 7
を表すことができ某年某月某日
ます。- そのため
2020年10月1日
未処理なので、最終的にはans += 2
、
#include <iostream>
using namespace std;
int days[13] = {
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool is_leap(int year)
{
return year % 400 == 0 || year % 4 == 0 && year % 100 != 0;
}
int get_day(int year, int month)
{
if(month == 2) return 28 + is_leap(year);
return days[month];
}
int main()
{
int sum = 0, ans = 0;
for (int i = 2000; i <= 2019; i ++)
for (int j = 1; j <= 12; j ++)
for (int k = 1; k <= get_day(i, j); k ++)
{
int weekday = (sum + 5) % 7;
if(k == 1 || weekday == 0) ans += 2;
else ans ++;
sum ++;
}
for (int j = 1; j <= 9; j ++)
for (int k = 1; k <= get_day(2020, j); k ++)
{
int weekday = (sum + 5) % 7;
if(k == 1 || weekday == 0) ans += 2;
else ans ++;
sum ++;
}
cout << ans + 2 << endl;
return 0;
}