第十五届蓝桥杯 2024 C/C++组 艺术与篮球
目录
题目:
题目描述:
题目链接:
思路:
思路详解:
代码:
代码详解:
题目:
题目描述:
题目链接:
P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷
艺术与篮球 - 蓝桥云课
思路:
思路详解:
还是经典的日期问题(后续有时间我会整理蓝桥杯历届的日期问题),日期问题的遍历其实都可以按照固定的格式来写,多敲几遍就对格式很熟悉了,简单来说就是定义函数判断闰年,三层for循环遍历年月日,在每层for循环中结合题意进行特判。由题要把汉字转换为笔画,开局先打表,记录索引0-9(数字就代表汉字)对应的笔画。遍历到某一个年月日之后就是分解数位并求和的问题
代码:
代码详解:
#include<bits/stdc++.h>
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<<ans<<endl;return 0;
}