第十五届蓝桥杯 2024 C/C++组 艺术与篮球

目录

题目:

题目描述:

题目链接:

思路:

思路详解:

代码:

代码详解:


题目:

题目描述:

第十五届蓝桥杯 2024 C/C++组 艺术与篮球_第1张图片

第十五届蓝桥杯 2024 C/C++组 艺术与篮球_第2张图片

题目链接:

P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷

艺术与篮球 - 蓝桥云课

思路:

思路详解:

还是经典的日期问题(后续有时间我会整理蓝桥杯历届的日期问题),日期问题的遍历其实都可以按照固定的格式来写,多敲几遍就对格式很熟悉了,简单来说就是定义函数判断闰年,三层for循环遍历年月日,在每层for循环中结合题意进行特判。由题要把汉字转换为笔画,开局先打表,记录索引0-9(数字就代表汉字)对应的笔画。遍历到某一个年月日之后就是分解数位并求和的问题

代码:

代码详解:

#include
using namespace std;

int ans;
int bihua[]={13,1,2,3,5,4,4,2,2,2};  //笔画数:索引0-9(数字就代表汉字)对应的笔画
int daysofmonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //月的天数:索引1-12表示某月 

bool isleaqyear(int y)  //判断是否闰年 
{
	if(y%400==0||(y%4==0&&y%100!=0))
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	for(int year=2000;year<=2024;year++)
	{
		int monthmax=12;
		if(year==2024)  //题目说到2024年4月13日,并不是每年都遍历到12月 
		{
			monthmax=4;
		}
		for(int month=1;month<=monthmax;month++)
		{
			int daymax=daysofmonth[month];
			if(month==2&&isleaqyear(year)==true)  //判断闰年二月 
			{
				daymax=29;
			}
			if(year==2024&&month==4)  //到2024年4月13日 
			{
				daymax=13;
			}
			for(int day=1;day<=daymax;day++)
			{
				int temp1=year;  //养成习惯定义临时变量,万一要对year等变量计算变化的话影响循环 
				int temp2=month;
				int temp3=day;
				int tmp[8];    //定义临时数组用于存放日期,如20240413 
				int sum=0;     //定义笔画总数,sum和tmp[]要定义在遍历day的循环中才能初始化每一天 
				for(int i=3;i>=0;i--)  //分解年份(4位)并存入临时数组 
				{
					tmp[i]=temp1%10;
					temp1/=10;
				}  //一开始考虑到前导0,月份和日期那里都判断了是否<10,实际上<10的话%10就是存0进去 
				tmp[4]=temp2/10;  //分解月份(2位) 
				tmp[5]=temp2%10;
				tmp[6]=temp3/10;  //分解日期(2位) 
				tmp[7]=temp3%10;
				for(int i=0;i<=7;i++)  //遍历临时数组里的每个数字并计算对应笔画数的和 
				{
					sum+=bihua[tmp[i]]; //tmp[i]代表数组里某个数字,作为索引 
				}
				if(sum>50)
				{
					ans++;
				}
			}
		}
	}
	cout<

你可能感兴趣的:(蓝桥杯题解,蓝桥杯,c语言,c++)