• 完全日期(蓝桥杯)


    完全日期

    题目描述

    本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

    如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。

    例如:2021 年 6 月 5 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 5 = 162+0+2+1+6+5=16,而 16 是一个完全平方数,它是 44 的平方。所以 20212021 年 6 月 5 日是一个完全日期。

    例如:2021年 6 月 23 日的各位数字之和为 2 + 0 + 2 + 1 + 6 + 2 + 3 = 162+0+2+1+6+2+3=16,是一个完全平方数。所以 2021 年 6 月 23 日也是一个完全日期。

    请问,从 2001 年 1月 1日到 2021年 12 月 31日中,一共有多少个完全日期?

    模拟

    // 导入必要的标准库
    #include 
    using namespace std;
    
    // 预定义每个月的天数,其中二月默认为28天,闰年时会修改
    int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    
    // 定义一个检查函数,用来判断某个日期的年月日数字和是否为完全平方数
    bool check(int n)
    {
        int sum=0; // 定义一个变量来存储数字和
        // 使用循环来计算年月日所有数字的和
        while(n)
        {
            sum+=n%10; // 计算当前最低位的数字,并加到和中
            n/=10; // 将数字右移一位,即去掉已经处理的最低位
        }
        // 从1到8遍历所有可能的平方数(因为数字和不会超过两位数的完全平方数)
        for(int i=1;i<=8;i++)
        {
            // 如果i的平方等于数字和,则返回true,表示这是一个完全日期
            if(pow(i,2)==sum)
                return true;
        }
        // 如果所有的平方数都不匹配,则返回false
        return false;
    }
    
    // 主函数
    int main()
    {
        int ans=0; // 用于存储完全日期的总数
        // 遍历2001年到2021年所有的年份
        for(int i=2001;i<=2021;i++)
        {
            // 判断当前年份是否为闰年,并设置二月的天数
            if(i%4==0&&i%100!=0||i%400==0)
                months[2]=29;
            else
                months[2]=28;
            // 遍历每个月
            for(int j=1;j<=12;j++)
            {
                // 遍历每天
                for(int k=1;k<=months[j];k++)
                {
                    // 生成当前日期的数字形式,如20210605
                    int num=i*10000+j*100+k;
                    // 调用check函数检查当前日期
                    if(check(num))
                        ans++; // 如果是完全日期,计数器加1
                }
            }
        }
        // 输出完全日期的总数
        cout<<ans;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    代码的主要逻辑是遍历指定日期范围内的每一天,将年月日组成一个整数,并计算这个整数每位数字的和,然后检查这个和是否是1到8中某个数的平方,如果是,则将该日期视为“完全日期”,并对完全日期的总数进行计数。最后,输出在指定日期范围内的完全日期总数。

  • 相关阅读:
    HBuilderX安装+配置教程
    python爬虫中怎么写反爬虫
    字节面试问题
    HarmonyOS ArkUI实战开发-NAPI 加载原理(上)
    第10章-Redis_主从复制
    Vert.x web 接收请求时反序列化对象 Failed to decode 如何解决?
    enote笔记法之附录1——“语法词”(即“关联词”)(ver0.2)
    [附源码]SSM计算机毕业设计政府项目管理平台JAVA
    笔记--总线舵机YB-SD15M--stm32
    软件工程毕业设计课题(29)基于JAVA毕业设计JAVA图片分享网站系统毕设作品项目
  • 原文地址:https://blog.csdn.net/m0_73841621/article/details/138034021