第11回ブルーブリッジカップ-ランニングエクササイズ

問題の説明
Xiaolanは毎日運動しています。

  • 通常の状況では、Xiaolanは毎日1キロ走っています。

  • 月曜日または月の初め(1日)の場合、やる気を起こさせるために、小欖は2キロ走ります。

  • 月曜日または月の初めでもある場合、Xiaolanも2km走行します。

Xiaolanは、2000年1月1日土曜日(包括的)から2020年10月1日木曜日(包括的)まで、長い間稼働しています。

この期間に小欖は何キロ走りましたか?

回答提出
これは、空欄に結果を記入する質問です。結果を計算して提出するだけです。
この質問の結果は整数です。回答を送信するときは、この整数のみを入力してください。余分なコンテンツを入力すると、スコアを付けることができなくなります。


回答:8879


回答:

解题思路

  1. 0 ~ 6を表すために使用周一 至 周日ます;
  2. 経過日数sumを表す2000年1月1日ために使用さ某年某月某日ます。
  3. 2000年1月1日土曜日以降、useは週(sum + 5) % 7を表すことができ某年某月某日ます。
  4. そのため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;
}

LanqiaoカップC / C ++グループ州大会過去数年間の質問

おすすめ

転載: blog.csdn.net/weixin_46239370/article/details/115093881