第十一届蓝桥杯 ——跑步锻炼

蓝桥杯历届试题 专栏收录该内容
260 篇文章 72 订阅

问题描述
小蓝每天都锻炼身体。

  • 正常情况下,小蓝每天跑 1 千米。

  • 如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑 2 千米。

  • 如果同时是周一或月初,小蓝也是跑 2 千米。

小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年10 月 1 日周四(含)。

请问这段时间小蓝总共跑步多少千米?

答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


答案:8879


题解:

解题思路

  1. 0 ~ 6 来代表 周一 至 周日
  2. sum 来代表 2000年1月1日某年某月某日 所经过的天数;
  3. 由于 2000年1月1日 是周六,那么用 (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;
}

蓝桥杯C/C++组省赛历年题

  • 8
    点赞
  • 3
    评论
  • 9
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页

打赏作者

业余算法学徒

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值