第十一届蓝桥杯(国赛)——含 2 天数

Posted 业余算法学徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十一届蓝桥杯(国赛)——含 2 天数相关的知识,希望对你有一定的参考价值。

问题描述
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴,因为每天日历上都可以看到 2。

如果日历中只显示年月日,请问从公元 1900 年 1 月 1 日到公元 9999 年 12月 31 日,一共有多少天日历上包含 2。

即有多少天中年月日的数位中包含数字 2。

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


答案:1994240


题解:

#include <iostream>
using namespace std;

int days[] = {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;
}

bool check1(int x)
{
	int year = x / 10000;
	int month = x / 100 % 100;
	int day = x % 100;
	
	if(month < 1 || month > 12) return false;
	if(month != 2) 
	{
		if(day < 1 || day > days[month]) return false;
	}
	else
	{
		if(day < 1 || day > days[month] + is_leap(year)) return false;
	}
	return true;
}

bool check2(int x)
{
	while(x)
	{
		if(x % 10 == 2) return true;
		x /= 10;
	}
	return false;
}

int main()
{
	int ans = 0;
	for (int i = 19000101; i <= 99991231; i ++)
		if(check1(i) && check2(i)) 
			ans ++;
	
	cout << ans << endl;
	return 0;
}

蓝桥杯C/C++国赛历年题

以上是关于第十一届蓝桥杯(国赛)——含 2 天数的主要内容,如果未能解决你的问题,请参考以下文章

第十一届蓝桥杯(国赛)——美丽的 2

第十一届蓝桥杯大赛软件类决赛(C/C++ 大学A组)

蓝桥杯嵌入式——第十届蓝桥杯嵌入式国赛

蓝桥杯嵌入式——第十届蓝桥杯嵌入式国赛

第十一届蓝桥杯国赛

2020年第十一届蓝桥杯国赛个人题解