日期问题总结

做日期问题,首先把模版写下来,再根据具体情况具体分析,基本上考试考到日期问题都是模拟和枚举,数据量也不会太大,所以我们根据题目要求直接打暴力就可以过.

模板:

const int months[]={//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int y){//判断是否为闰年 if(y%100!=0&&y%4==0||y%400==0) return 1;return 0;
}
int get_month_days(int y,int m){//判断某个月天数 int res=months[m];if(m==2) res+=is_leap(y);return res;
}
int get_total_days(int y,int m,int d){//计算第一天到某个日期天数 int res=0;for(int i=1;i<y;i++)//计算前y-1年的天数 res+=365+is_leap(i);for(int i=1;i<m;i++)//计算第i年前m-1个月的天数 res+=get_month_days(y,i);return res+d;//第y年第m月的天数 
}

注 :写日期问题时,这三个模板可能不会都用上,也可能都不会用上.

例题:

日期差值

有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。

输入格式

输入包含多组测试数据。

每组数据占两行,分别表示两个日期,形式为 YYYYMMDD

输出格式

每组数据输出一行,即日期差值。

数据范围

年份范围 [1,9999]
保证输入日期合法。
测试数据的组数不超过 100。

输入样例:
20110412
20110422
输出样例:
11
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
const int N=5e5+5;
typedef long long LL;
using namespace std;
const int months[]={//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int y){//判断是否为闰年 if(y%100!=0&&y%4==0||y%400==0) return 1;return 0;
}
int get_month_days(int y,int m){//判断某个月天数 int res=months[m];if(m==2) res+=is_leap(y);return res;
}
int get_total_days(int y,int m,int d){//计算第一天到某个日期天数 int res=0;for(int i=1;i<y;i++)//计算前y-1年的天数 res+=365+is_leap(i);for(int i=1;i<m;i++)//计算第i年前m-1个月的天数 res+=get_month_days(y,i);return res+d;//第y年第m月的天数 
}
int main()
{int y1,m1,d1,y2,m2,d2;while(~scanf("%04d%02d%02d\n%04d%02d%02d",&y1,&m1,&d1,&y2,&m2,&d2))printf("%d\n",abs(get_total_days(y1,m1,d1)-get_total_days(y2,m2,d2))+1);return 0;
}

 

回文日期​​​​​​​

在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。

牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。

显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。

牛牛认为,一个日期是回文的,当且仅当表示这个日期的 8 位数字是回文的。

现在,牛牛想知道:在他指定的两个日期之间(包含这两个日期本身),有多少个真实存在的日期是回文的。

一个 8 位数字是回文的,当且仅当对于所有的 i(1≤i≤8) 从左向右数的第 i 个数字和第 9−i 个数字(即从右向左数的第 i 个数字)是相同的。

例如:

  • 对于 2016 年 11 月 19 日,用 8位数字 20161119 表示,它不是回文的。
  • 对于 2010 年 1 月 2 日,用 8 位数字 20100102 表示,它是回文的。
  • 对于 2010 年 10 月 2 日,用 8 位数字 20101002 表示,它不是回文的。
输入格式

输入包括两行,每行包括一个 8 位数字。

第一行表示牛牛指定的起始日期 date1,第二行表示牛牛指定的终止日期 date2。保证 date1 和 date2 都是真实存在的日期,且年份部分一定为 4 位数字,且首位数字不为 0。

保证 date1 一定不晚于 date2。

输出格式

输出共一行,包含一个整数,表示在 date1 和 date2 之间,有多少个日期是回文的。

输入样例:
20110101
20111231
输出样例:
1

 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
const int N=5e5+5;
typedef long long LL;
using namespace std;
const int months[]={//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int y){//判断是否为闰年 if(y%100!=0&&y%4==0||y%400==0) return 1;return 0;
}
int get_month_days(int y,int m){//判断某个月天数 int res=months[m];if(m==2) res+=is_leap(y);return res;
}
/*int get_total_days(int y,int m,int d){//计算第一天到某个日期天数 int res=0;for(int i=1;i<y;i++)//计算前y-1年的天数 res+=365+is_leap(i);for(int i=1;i<m;i++)//计算第i年前m-1个月的天数 res+=get_month_days(y,i);return res+d;//第y年第m月的天数 
}*/
bool check(int date){int year=date/10000;int month=date%10000/100;int day=date%100;if(month<1||month>12) return false;if(day<1||day>get_month_days(year,month)) return false;return true;
}
int main()
{int date1,date2;cin>>date1>>date2;int res=0;for(int i=1000;i<9999;i++){string a=to_string(i);string b(a.rbegin(),a.rend());int date=stoi(a+b);if(date>=date1&&date<=date2&&check(date))res++;}cout<<res<<endl;return 0;
}

日期问题​​​​​​​

小明正在整理一批历史文献。这些历史文献中出现了很多日期。

小明知道这些日期都在1960年1月1日至2059年12月31日。

令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。

更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

比如02/03/04,可能是2002年03月04日、2004年02月03日或2004年03月02日。

给出一个文献上的日期,你能帮助小明判断有哪些可能的日期对其对应吗?

输入格式

一个日期,格式是”AA/BB/CC”。

即每个’/’隔开的部分由两个 0-9 之间的数字(不一定相同)组成。

输出格式

输出若干个不相同的日期,每个日期一行,格式是”yyyy-MM-dd”。

多个日期按从早到晚排列。

数据范围

0≤A,B,C≤9

输入样例:
02/03/04
输出样例:
2002-03-04
2004-02-03
2004-03-02
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
const int N=5e5+5;
typedef long long LL;
using namespace std;
/*const int months[]={//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int y){//判断是否为闰年 if(y%100!=0&&y%4==0||y%400==0) return 1;return 0;
}
int get_month_days(int y,int m){//判断某个月天数 int res=months[m];if(m==2) res+=is_leap(y);return res;
}
int get_total_days(int y,int m,int d){//计算第一天到某个日期天数 int res=0;for(int i=1;i<y;i++)//计算前y-1年的天数 res+=365+is_leap(i);for(int i=1;i<m;i++)//计算第i年前m-1个月的天数 res+=get_month_days(y,i);return res+d;//第y年第m月的天数 
}*/
int a,b,c;
int check(int i,int j,int k)
{i=i%100;if(a==i&&b==j&&c==k) return 1;if(a==j&&b==k&&c==i) return 1;if(a==k&&b==j&&c==i) return 1;return 0;
}
int main()
{scanf("%d/%d/%d",&a,&b,&c);int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i=1960;i<=2059;i++){if((i%4==0&&i%100!=0)||i%400==0){month[2]=29;}else{month[2]=28;}for(int j=1;j<=12;j++){for(int k=1;k<=month[j];k++){if(check(i,j,k)){printf("%d-%02d-%02d\n",i,j,k);}}}}return 0;
}

 

回文日期​​​​​​​

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。

因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。

我们称这样的日期是回文日期。

有人表示 20200202 是“千年一遇” 的特殊日子。

对此小明很不认同,因为不到 22 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。

对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。

算不上“千年一遇”,顶多算“千年两遇”。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

注意: 本题数据保证一定有解。

注意

下一个回文日期和下一个 ABABBABA 型的回文日期可能是同一天。

ABABBABA 型的回文日期,需要满足 A≠B。

输入格式

输入包含一个八位整数 N,表示日期。

输出格式

输出两行,每行 1 个八位数。

第一行表示下一个回文日期,第二行表示下一个 ABABBABA 型的回文日期。

数据范围

对于所有评测用例,10000101≤N≤89991231,保证 N 是一个合法日期的 8 位数表示。

输入样例:
20200202
输出样例:
20211202
21211212

 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
const int N=5e5+5;
typedef long long LL;
using namespace std;
const int months[]={//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31
};
/*int is_leap(int y){//判断是否为闰年 if(y%100!=0&&y%4==0||y%400==0) return 1;return 0;
}
int get_month_days(int y,int m){//判断某个月天数 int res=months[m];if(m==2) res+=is_leap(y);return res;
}
int get_total_days(int y,int m,int d){//计算第一天到某个日期天数 int res=0;for(int i=1;i<y;i++)//计算前y-1年的天数 res+=365+is_leap(i);for(int i=1;i<m;i++)//计算第i年前m-1个月的天数 res+=get_month_days(y,i);return res+d;//第y年第m月的天数 
}*/
bool check(int date)
{int year = date / 10000;int month = date % 10000 / 100;int day = date % 100;if(!day || month < 0 || month > 12 ) return false;if(month != 2 && day >months[month]) return false;if(month == 2){if((year%4==0&&year%100!=0)||(year%400==0)) //闰年特判{if(day > 29) return false;}else {if(day > 28) return false;}}return true;
}
bool check1(string s)//判断是否是回文日期
{int len = s.size();for(int i = 0, j = len - 1; i < j ; i++,j--)//双指针{if(s[i] != s[j]) return false;}return true;
}
bool check2(string s)//判断是否是ABABBABA型的回文日期
{if(check1(s))//首先该日期要满足回文格式{if(s[0]!=s[2] || s[1]!= s[3] || s[0] == s[1]) return false;return true;}
}
int main()
{int date,flag=0;cin>>date;for(int i = date + 1; ;i++){if(check(i)){string s = to_string(i);if(check1(s)&&!flag)//输出回文日期{cout<<i<<endl;flag = 1;//标记一下,避免多次输出}if(check2(s))//输出ABABBABA 型的回文日期{cout<<i<<endl;return 0;}}}return 0;
}

日期计算​​​​​​​

给定一个年份 y 和一个整数 d,问这一年的第 d 天是几月几日?

注意闰年的 2 月有 29 天。

满足下面条件之一的是闰年:

  1. 年份是 4 的整数倍,而且不是 100 的整数倍;
  2. 年份是 400 的整数倍。
输入格式

输入的第一行包含一个整数 y,表示年份,年份在 1900 到 2015 之间(包含 1900 和 2015)。

输入的第二行包含一个整数 d,d 在 1 至 365 之间。

输出格式

输出两行,每行一个整数,分别表示答案的月份和日期。

数据范围

1900≤y≤2015,
1≤d≤365

输入样例1:
2015
80
输出样例1:
3
21
输入样例2:
2000
40
输出样例2:
2
9

 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<list>
#include<deque>
const int N=5e5+5;
typedef long long LL;
using namespace std;
/*const int months[]={//平年天数 0,31,28,31,30,31,30,31,31,30,31,30,31
};
int is_leap(int y){//判断是否为闰年 if(y%100!=0&&y%4==0||y%400==0) return 1;return 0;
}
int get_month_days(int y,int m){//判断某个月天数 int res=months[m];if(m==2) res+=is_leap(y);return res;
}
int get_total_days(int y,int m,int d){//计算第一天到某个日期天数 int res=0;for(int i=1;i<y;i++)//计算前y-1年的天数 res+=365+is_leap(i);for(int i=1;i<m;i++)//计算第i年前m-1个月的天数 res+=get_month_days(y,i);return res+d;//第y年第m月的天数 
}*/
int d[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m;
int main()
{cin>>y>>m;if(y%4==0&&y%100!=0||y%400==0) d[2]=29;else d[2]=28;int x=0;while(m>0){if(m-d[x]<=0) break;else{m-=d[x];x++;}}cout<<x<<endl<<m;return 0;
}

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

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

相关文章

小项目知识点

0.vue运行自启动 "dev": "vite --open" //package.json 1.Element-plus 安装element-plus pnpm i element-plus 如何使用&#xff1f; <el-button :icon"Plus">按钮</el-button> <script setup langts> import { Plus …

mysql 数据库 增删改查 基本操作

目录 一 SQL 详细介绍 &#xff08;一&#xff09;SQL 分类 &#xff08;二&#xff09; SQL 语言规范 &#xff08;三&#xff09;数据库对象和命名 1&#xff0c;数据库的组件(对象)&#xff1a; 2&#xff0c;命名规则&#xff1a; &#xff08;四&#xff09; SQL…

【Rust】——panic!和不可恢复的错误

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

使用Python查找字符串中包含的多个元素

目录 一、引言 二、基本字符串操作 使用in关键字查找子字符串 使用循环和条件判断查找多个子字符串 三、使用正则表达式进行高级搜索 导入re模块 使用re.search()查找单个模式 使用re.findall()查找多个模式 四、案例与代码 五、优化与扩展 六、总结 一、引言 在Py…

【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

20万买新能源,除了烂大街的车,还可以选“精而美”

美”文 | AUTO芯球 作者 | 雷歌 “旧车撞了&#xff0c;准备买新车”。 前几天老家一个同学发来消息&#xff0c;春节他追尾了别人的车&#xff0c;不光赔了钱&#xff0c;还把自己的车车头撞废了&#xff0c;修好得一大笔钱&#xff0c;他干脆当废铁1万块钱卖给二手车商了。…

我的自建博客之旅06之Mrdoc

这个是我折腾笔记项目的最后一篇文章了,这个项目是类似于语雀的文档笔记项目,因为我当初想找一个既可以当做笔记,又可以作为团队文档分享的笔记,除了语雀,就发现了这个项目。 这个开源项目的界面或者文档组织方式其实是我最喜欢的,但是我后来放弃它的原因是它的后台编辑逻…

React Native:跨平台移动应用开发的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

nginx学习记录-目录结构及基本配置

1. nginx目录结构 执行tree命令就可以看到nginx的目录结构了&#xff0c;主要有4个&#xff0c;分别是配置目录conf&#xff0c;还有界面目录html&#xff0c;日志目录logs以及程序sbin/nginx。 2. nignx基本配置 nginx的主要配置文件为/usr/local/nginx/conf/nginx.conf&…

matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面

1、内容简介 略 65-可以交流、咨询、答疑 2、内容说明 matlab 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面 混沌系统李雅普洛夫指数谱相图分岔图和庞加莱界面 李雅普洛夫指数谱、相图、分岔图、庞加莱界面 3、仿真分析 略 4、参考论文 略

训练时损失出现负数,正常吗?为什么

在训练神经网络时&#xff0c;通常期望损失函数的值是非负的&#xff0c;因为损失函数是用来度量模型预测与真实值之间的差异的。然而&#xff0c;有时候在训练过程中&#xff0c;损失函数可能会出现负数的情况&#xff0c;这可能是正常的&#xff0c;也可能是因为某些原因导致…

Bito插件

此文档只作用于指导性工作&#xff0c;更多资料请自行探索。 1、插件安装与介绍 1.1 插件下载与安装 在idea中搜索&#xff1a;Bito Bito is also available for:​编辑VSCode​编辑JetBrains​编辑CLI 1.2 官方介绍 插件&#xff1a;ChatGPT GPT-4 - Bito AI Code Assista…

TypeError: Descriptors cannot not be created directly.

问题&#xff1a; Traceback (most recent call last): File "main_VAE.py", line 2, in <module>import tensorflow as tfFile "D:\Anaconda\envs\tensorflow1\lib\site-packages\tensorflow\__init__.py", line 99, in <module> …

双向链表、单双向链表比较、双向链表的基本操作

我要成为嵌入式高手之3月20日数据结构第三天&#xff01;&#xff01; ———————————————————————————— 双向链表 双向链表与单向链表的区别&#xff1a;双向链表中的结点的指针域包含前驱结点的地址&#xff0c;而单向链表的结点中指针域只有后驱结…

Q-Tester:适用于开发、生产和售后的诊断测试软件

Q-Tester.Expert是一款基于ODX&#xff08;ASAM MCD-2D / ISO 22901-1&#xff09;国际标准的工程诊断仪。通过此诊断仪可实现与ECU控制器之间的数据交互。这一基于ODX国际标准的解决方案&#xff0c;其优势在于&#xff1a;ODX数据库不仅可在开发部门交互&#xff0c;而且可在…

开发指南011-前端PC版结构

主要目录如下&#xff1a; public images -- 各类图片 static -- 各种js文件 src api --接口文件 qlmcomponents --平台组件 store --vuex styles --风格 router --路由 lang --语言包 utils -- 公用工具 views platform -- 平台所属页面 *** --对应产品页…

DML - 增删改(insert into,delete,update)

引言&#xff1a;对比DB / 表结构 : create , drop , alter 本次记录 数据操作 语言&#xff1a; 1.进入 hive 数据库&#xff0c;再打开 ryx1 表 2. insert select 3. update select 4. delete select

python---练习2

1、打印图案 &#xff08;1&#xff09;直角三角形 #多层循环layer int(input("请输入您要打印的层数&#xff1a; "))index 1 while index < layer : #外层循环控制层数j 1while j < index : #内层循环控制每层个数print (&qu…

C++进阶:二叉搜索树介绍、模拟实现(递归迭代两版本)及其应用

上次介绍完多态后&#xff1a;C进阶&#xff1a;详解多态&#xff08;多态、虚函数、抽象类以及虚函数原理详解&#xff09; 也是要开始继续学习了 文章目录 1.二叉搜索树1.1概念1.2二叉搜索树特性1.3 二叉搜索树的操作 2.模拟实现2.1项目文件规划2.2基本结构2.3各种接口、功能…

KY79 浮点数加法

描述&#xff1a; 求2个浮点数相加的和 题目中输入输出中出现浮点数都有如下的形式&#xff1a; P1P2…Pi.Q1Q2…Qj 对于整数部分&#xff0c;P1P2…Pi是一个非负整数 对于小数部分&#xff0c;Qj不等于0 输入描述&#xff1a; 对于每组案例&#xff0c;每组测试数据占2行&…