蓝桥杯 — — 完全日期

完全日期

友情链接:完全日期

题目:

在这里插入图片描述

思路:

直接从20010101枚举到20211231,然后再判断每一个数是否是一个合法的日期,如果这个日期是合法的,接着判断这个日期的每一个位置上的数字之和是否是一个完全平方数即可。

  1. 判断日期是否合法:

    可以使用一个数组来记录所有的月份对应的天数,存在特例:2月在闰年的时候是29天,在平年的时候是28天。我们可以在每次判断是闰年的时候将数组中2月份的值更改为29天,然后判断完后再将其进行恢复为28天。

    判断闰年:这个年份能对400整除或者这个年份能对4整除且不能整除100


  2. 判断是否是一个完全平方数:

    因为对于给定范围的年份,其范围是有限的,对于这道题给出的日期一共有8位数,也就是说每个位置上的数最大取的是9,最小取的是0,对应的所有位置最大值的和是 8 × 9 8 \times 9 8×9,最小值的和0,为了更快的知道这个求和出来的值是否是一个完全平方数,我们可以使用一个哈希表将这些值的完全平方数进行存储下来,这样每次查找的时间就变为了 O ( 1 ) O(1) O(1),我们开辟大小为80的数组内存空间(80个大小是因为所有年份的完全平方数的范围为: 0 0 0 ~ $ 8 \times 9 = 72$),对1 ~ 9的平方进行标记,表示该范围内的所有完全平方数。

代码:

// 完全日期
#include<iostream>
#include<string>
using namespace std;int hashMap[80];  // 定义一个哈希数组,用于记录完全平方数
int months[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 判断闰年
bool judge(int year, int month, int day){// 被400整除,被4整数并不被100整除if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0){months[2] = 29;}if(day > months[month] || day <= 0) return false;months[2] = 28;  // 恢复月份的状态return true;
} // 判断完全平方数
bool sqrtNum(int num){int temp = 0;while(num){temp += num % 10;num /=10;}if(hashMap[temp]){  // 查找到这个数是否为一个完全平方数return true;} return false;
}void solve(){const int cl = 20010101;const int cr = 20211231;int year,month,day;int ans = 0;for(int i = 1;i <= 9;i ++){hashMap[i * i] = 1;   // 初始化哈希数组}for(int i = cl; i <= cr;i ++){int temp = i;// 首先分割为年月日,不能对i直接进行分割,否则会导致死循环day = temp % 100;temp /= 100;month = temp % 100;if(month <= 0 || month > 12) continue;    // 如果月份不合法就直接进行跳过temp /= 100;year = temp;if(judge(year, month, day)){if(sqrtNum(i)){ans++;} }}cout<<ans<<endl;return ;
}int main(){ios::sync_with_stdio(false);cin.tie(0);int t = 1;while(t--){solve();}return 0;
} 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625209.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图片转表格怎么显示两位小数字?

图片转表格的核心机制在于利用OCR技术&#xff0c;将图片上的表格文字精准转化为计算机能够理解的表格数据。然而&#xff0c;在进行这一转换过程中&#xff0c;为了防止出现科学计数法等复杂显示方式&#xff0c;程序默认会将所有单元格设置为字符串格式。这虽然保证了转换的准…

【C++学习】C++IO流

这里写目录标题 &#x1f680;C语言的输入与输出&#x1f680;什么是流&#x1f680;CIO流&#x1f680;C标准IO流&#x1f680;C文件IO流 &#x1f680;C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取…

智谱AI通用大模型:官方开放API开发基础

目录 一、模型介绍 1.1主要模型 1.2 计费单价 二、前置条件 2.1 申请API Key 三、基于SDK开发 3.1 Maven引入SDK 3.2 代码实现 3.3 运行代码 一、模型介绍 GLM-4是智谱AI发布的新一代基座大模型&#xff0c;整体性能相比GLM3提升60%&#xff0c;支持128K上下文&#x…

pandas基本用法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas的数据结构1、一维数组pd.Series1.1 pd.Series&#xff08;data,index,dtype&#xff09;示例1&#xff1a;不定义index示例2&#xff1a;自定义inde…

操作系统—GCC与编译全流程

文章目录 GCC与编译全流程1.GCC是什么&#xff1f;2.编译全流程(1).GCC到底做了哪些事情&#xff1f;(2).预处理I.预处理会做什么II.预处理器主要包含什么&#xff1f;III.宏的一些魔法 (3).编译I.基本流程II.编译优化III.一点例子 (4).汇编(5).链接(6).说到这里&#xff0c;为…

Java之二维数组

使用二维数组&#xff1a; 引用二维数组元素需要指明行下标和列下标。二维数组有两个指标&#xff0c;行数使用“数组名.length",每行的列数使用“数组名[i].length”。遍历是二维数组的基本算法&#xff0c;使用双重循环遍历二维数组。外层循环控制行&#xff0c;内存循环…

我的思考工作流(2024年版)

去年底&#xff0c;我对自己的思考工作流程又做了一些优化和改进&#xff0c;把它变得更为简洁、清晰。 因此&#xff0c;今天我想把它分享给大家&#xff0c;希望能给你一些启发。 我的核心方法论依然是我自己提出的「INKP知识管理法」&#xff08;参见《打开心智》第五章&…

vscode 搭建stm32开发环境记录(eide+cortex-debug+jlink)

前言 clion使用的快过期了&#xff0c;所以就准备使用vscode 来代替clion作为代码开发环境 vscode 插件安装 创建个空白工程 添加项目相关的源文件&#xff0c;和配置宏定义和头文件目录 编译和烧录(ok) 结合cortex-debug 结果(测试ok)

BioTech - 研发 AlphaFold2 使用自定义 MSA 与 Template 的组合框架

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/137835482 AlphaFold2 是蛋白质结构预测算法,使用 MSA(多序列比对) 特征和 Template(模版) 特征,来提高预测的准确性。 MSA 特征:利用进化信息来预测蛋白质结构,通…

【echarts】使用 ECharts 绘制3D饼图

使用 ECharts 绘制3D饼图 在数据可视化中&#xff0c;饼图是表达数据占比信息的常见方式。ECharts 作为一个强大的数据可视化库&#xff0c;除了标准的二维饼图&#xff0c;也支持更加生动的三维饼图绘制。本文将指导你如何使用 ECharts 来创建一个3D饼图&#xff0c;提升你的…

C++设计模式|创建型 2.工厂模式

1.简单工厂思想 简单工厂模式不属于23种设计模式之⼀&#xff0c;更多的是⼀种编程习惯。它的核心思想是将产品的创建过程封装在⼀个⼯⼚类中&#xff0c;把创建对象的流程集中在这个⼯⼚类⾥⾯。卡码网将其结构描述为下图所示的情况&#xff1a; 简单⼯⼚模式包括三个主要⻆⾊…

apache配置ssl证书

SSL证书&#xff0c;即安全套接层证书&#xff0c;是一种数字证书&#xff0c;它通过在客户端浏览器和Web服务器之间建立一条加密通道&#xff0c;保证了双方传输信息的安全性。当用户访问一个使用SSL证书保护的网站时&#xff0c;浏览器会显示一个锁形图标&#xff0c;表示连接…