发表于 前天 15:08

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

目次

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

题目:

题目描述:

https://i-blog.csdnimg.cn/direct/b894ab6141134a0688b363e590360b2d.png
https://i-blog.csdnimg.cn/direct/81faa33a1b9247de8eb9c84d34958c0b.png
题目链接:

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;
                        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;    //定义临时数组用于存放日期,如20240413
                                int sum=0;   //定义笔画总数,sum和tmp[]要定义在遍历day的循环中才能初始化每一天
                                for(int i=3;i>=0;i--)//分解年份(4位)并存入临时数组
                                {
                                        tmp=temp1%10;
                                        temp1/=10;
                                }//一开始考虑到前导0,月份和日期那里都判断了是否<10,实际上<10的话%10就是存0进去
                                tmp=temp2/10;//分解月份(2位)
                                tmp=temp2%10;
                                tmp=temp3/10;//分解日期(2位)
                                tmp=temp3%10;
                                for(int i=0;i<=7;i++)//遍历临时数组里的每个数字并计算对应笔画数的和
                                {
                                        sum+=bihua]; //tmp代表数组里某个数字,作为索引
                                }
                                if(sum>50)
                                {
                                        ans++;
                                }
                        }
                }
        }
        cout<<ans<<endl;
        return 0;
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 第十五届蓝桥杯 2024 C/C++组 艺术与篮球