IT评测·应用市场-qidao123.com技术社区

标题: 第十五届蓝桥杯 2024 C/C++组 艺术与篮球 [打印本页]

作者: 丝    时间: 昨天 15:08
标题: 第十五届蓝桥杯 2024 C/C++组 艺术与篮球
目次

题目:
题目描述:
题目链接:
思路:
思路详解:
代码:
代码详解:


题目:

题目描述:



题目链接:

P10385 [蓝桥杯 2024 省 A] 艺术与篮球 - 洛谷
艺术与篮球 - 蓝桥云课
思路:

思路详解:

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

代码详解:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int ans;
  4. int bihua[]={13,1,2,3,5,4,4,2,2,2};  //笔画数:索引0-9(数字就代表汉字)对应的笔画
  5. int daysofmonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //月的天数:索引1-12表示某月
  6. bool isleaqyear(int y)  //判断是否闰年
  7. {
  8.         if(y%400==0||(y%4==0&&y%100!=0))
  9.         {
  10.                 return true;
  11.         }
  12.         else
  13.         {
  14.                 return false;
  15.         }
  16. }
  17. int main()
  18. {
  19.         for(int year=2000;year<=2024;year++)
  20.         {
  21.                 int monthmax=12;
  22.                 if(year==2024)  //题目说到2024年4月13日,并不是每年都遍历到12月
  23.                 {
  24.                         monthmax=4;
  25.                 }
  26.                 for(int month=1;month<=monthmax;month++)
  27.                 {
  28.                         int daymax=daysofmonth[month];
  29.                         if(month==2&&isleaqyear(year)==true)  //判断闰年二月
  30.                         {
  31.                                 daymax=29;
  32.                         }
  33.                         if(year==2024&&month==4)  //到2024年4月13日
  34.                         {
  35.                                 daymax=13;
  36.                         }
  37.                         for(int day=1;day<=daymax;day++)
  38.                         {
  39.                                 int temp1=year;  //养成习惯定义临时变量,万一要对year等变量计算变化的话影响循环
  40.                                 int temp2=month;
  41.                                 int temp3=day;
  42.                                 int tmp[8];    //定义临时数组用于存放日期,如20240413
  43.                                 int sum=0;     //定义笔画总数,sum和tmp[]要定义在遍历day的循环中才能初始化每一天
  44.                                 for(int i=3;i>=0;i--)  //分解年份(4位)并存入临时数组
  45.                                 {
  46.                                         tmp[i]=temp1%10;
  47.                                         temp1/=10;
  48.                                 }  //一开始考虑到前导0,月份和日期那里都判断了是否<10,实际上<10的话%10就是存0进去
  49.                                 tmp[4]=temp2/10;  //分解月份(2位)
  50.                                 tmp[5]=temp2%10;
  51.                                 tmp[6]=temp3/10;  //分解日期(2位)
  52.                                 tmp[7]=temp3%10;
  53.                                 for(int i=0;i<=7;i++)  //遍历临时数组里的每个数字并计算对应笔画数的和
  54.                                 {
  55.                                         sum+=bihua[tmp[i]]; //tmp[i]代表数组里某个数字,作为索引
  56.                                 }
  57.                                 if(sum>50)
  58.                                 {
  59.                                         ans++;
  60.                                 }
  61.                         }
  62.                 }
  63.         }
  64.         cout<<ans<<endl;
  65.         return 0;
  66. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4