完全日期(蓝桥杯)

文章目录

完全日期

题目描述

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

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

例如: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日中,一共有多少个完全日期?

模拟

cpp 复制代码
// 导入必要的标准库
#include <bits/stdc++.h>
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到8中某个数的平方,如果是,则将该日期视为"完全日期",并对完全日期的总数进行计数。最后,输出在指定日期范围内的完全日期总数。

相关推荐
Persistent的粽子!1 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
库玛西1 小时前
深入浅出Linux select网络模型:从底层位图原理到C++面向对象高级封装
linux·服务器·网络·c++·ubuntu
2402_882893861 小时前
深入浅出 unordered_map 与 unordered_set——从使用到底层差异
c++·哈希·unordered_map·unordered_set
今天要早睡_2 小时前
C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析
android·java·c++
汉克老师2 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
闻缺陷则喜何志丹2 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码3 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
影视飓风TIM3 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
C++ 老炮儿的技术栈4 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化