洛谷 P2010 回文日期 题解
P2010 回文日期
题目描述
在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。
牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表 示方法不会相同。
牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现 在,牛牛想知道:在他指定的两个日期之间包含这两个日期本身),有多少个真实存 在的日期是回文的。
一个88位数字是回文的,当且仅当对于所有的i ( 1 \le i \le 8)i(1≤i≤8)从左向右数的第i个 数字和第9-i9−i个数字(即从右向左数的第ii个数字)是相同的。
例如:
•对于2016年11月19日,用88位数字2016111920161119表示,它不是回文的。
•对于2010年1月2日,用88位数字2010010220100102表示,它是回文的。
•对于2010年10月2日,用88位数字2010100220101002表示,它不是回文的。
每一年中都有1212个月份:
其中,1,3,5,7,8,10,121,3,5,7,8,10,12月每个月有3131天;4,6,9,114,6,9,11月每个月有3030天;而对于22月,闰年时有2929天,平年时有2828天。
一个年份是闰年当且仅当它满足下列两种情况其中的一种:
1.这个年份是44的整数倍,但不是100100的整数倍;
2.这个年份是400400的整数倍。
例如:
•以下几个年份都是闰年:2000,2012,20162000,2012,2016。
•以下几个年份是平年:1900,2011,20141900,2011,2014。
输入格式
两行,每行包括一个88位数字。
第一行表示牛牛指定的起始日期。
第二行表示牛牛指定的终止日期。
保证date_idate_i和都是真实存在的日期,且年份部分一定为44位数字,且首位数字不为00。
保证date 1date1 —定不晚于date 2date2。
输出格式
一个整数,表示在date1date1和date2date2之间,有多少个日期是回文的。
输入输出样例
输入 #1
20110101
20111231
输出 #1
1
输入 #2
20000101
20101231
输出 #2
2
说明/提示
【样例说明】
对于样例1,符合条件的日期是 2011110220111102。
对于样例2,符合条件的日期是 2001100220011002 和 2010010220100102 。
【子任务】
对于 60% 的数据,满足 date1 = date2date1=date2。
【思路】
模拟
难度还是很一般的模拟题目
首先,先说一下闰年这个玄学的东西,为什么要说闰年呢
因为闰年的2月有二十久天,这好像谁都知道吧
因为这个第29天的出现,导致可能会出现一个回文数,这个时候大家可能就会考虑了
每一年都判断一下是不是闰年,如果是那2月就有29天,如果不是那就有28天
其实根本不需要考虑这么复杂,如果出现这种原因可能是你还没再考虑一下的缘故
2月29构成的是0229,能和他组成回文的年份只有9220年,同时这一年也是闰年,所以这就很显然了
根本不需要管是不是闰年,每年都按照2月有29天来枚举,反正除了9220年都不会和2月29组成回文
最难搞的地方说完了
再说一下次难搞的地方
怎么判断是不是回文呢?
我的思路是这样的,在输入的时候实现吧字符串预处理为nian,yue,ri这三个变量分别储存年月日
然后枚举到每一天的时候,将ri的个位和十位换一下位置比如29号吧,就变为92,注意这里还是以数字的形式
然后同理,也将yue的各位和十位转换一下位置,加起来两个转换过后的数
如果这个数等于年,那么就是回文数
不等于就不是回文数,原理很简单我就不多赘述了
好了,两大稍微有点难度的东西解决掉了,剩下的小细节小骨头我就在代码里面标注了
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string s1,s2;
int x,y,z;
int nian,yue,ri;
int js = 0;
int month[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};//预处理出每一个月份里面的额天数
bool acioi()//判断是否是回文的函数
{
int qwq = (ri % 10) * 10 + ri / 10;
int owo = (yue % 10) * 10 + yue / 10;
int awa = owo + qwq * 100;
if(nian == awa)
return true;
else
return false;
}
int main()
{
cin >> s1;//输入起始
nian = (s1[0] - '0') * 1000 + (s1[1] - '0') * 100 + (s1[2] - '0') * 10 + (s1[3] - '0');
yue = (s1[4] - '0') * 10 + (s1[5] - '0');
ri = (s1[6] - '0') * 10 + (s1[7] - '0');//处理出来
cin >> s2;//输入结尾
x = (s2[0] - '0') * 1000 + (s2[1] - '0') * 100 + (s2[2] - '0') * 10 + (s2[3] - '0');
y = (s2[4] - '0') * 10 + (s2[5] - '0');
z = (s2[6] - '0') * 10 + (s2[7] - '0');//处理出来
while(nian != x || yue != y || ri != z)//没到结尾那一天就不结束
{
if(acioi() == true)//判断一下是否是闰年
js ++;//计数器累加
ri ++;//下一天
if(ri == month[yue] + 1)//这个月过完了
{
ri = 1;//下一个月的第一天
yue ++;//下一个月了
if(yue == 13)//今年过完了
{
nian ++;//下一年了
yue = 1;//下一年的第一个月
}
}
}
//从上面可以看出,最后一天也就是输入s2这一天是没有没枚举到的,所以这里在acioi一次就可以了
if(acioi() == true)
js ++;
cout << js << endl;//输出计数器
}
洛谷 P2010 回文日期 题解的更多相关文章
- 洛谷 P2010 回文日期
Noip2016普及组T2 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月 份,最后2位代表日期 ...
- P2010 回文日期 题解
这题其实就是纯暴力,暴力,再暴力,毫无技巧可言(总之您怎么乱搞都不会超时QAQ) 首先,根据题意,我们明白每年自多产生一个回文日期,因为对于每年的三百多天,前四位是固定的. 所以,我们只需要进行一个从 ...
- P2010 回文日期
P2010 回文日期 题解 回文日期,一共8位,只需要枚举4位就好了其实,然后判断它是否合法 代码 #include<bits/stdc++.h> using namespace std; ...
- 洛谷 P1217 回文质数
洛谷 P1217 回文质数 链接 https://www.luogu.org/problem/P1217 题目 题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 ...
- #P2010 回文日期 的题解
题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有 ...
- 洛谷P1217回文质数-Prime Palindrome回溯
P1217 [USACO1.5]回文质数 Prime Palindromes 题意:给定一个区间,输出其中的回文质数: 学习了洛谷大佬的回溯写法,感觉自己写回溯的能力不是很强: #include &l ...
- P2010回文日期
这道题是2016年普及组的题,难度等级为普及-. 这道题仍然是个模拟题.有两种策略:1.枚举回文,看日期是否存在2.枚举日期,看是否是回文.显然,前者要快很多,并且准确.本蒟蒻第一次便使用了后者,bu ...
- 洛谷P1435 回文子串
题目背景 IOI2000第一题 题目描述 回文词是一种对称的字符串.任意给定一个字符串,通过插入若干字符,都可以变成回文词.此题的任务是,求出将给定字符串变成回文词所需要插入的最少字符数. 比如 “A ...
- 洛谷 P1015 回文数 Label:续命模拟QAQ
题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...
随机推荐
- Helm命令日常使用
更换仓库 默认的stable仓库地址是:https://kubernetes-charts.storage.googleapis.com 若遇到Unable to get an update from ...
- zipkin的安装与搭建
下载与部署 jar中yaml文件配置 启动传入并参数 web界面 目录 zipkin是分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪. 下载与部署 wget -O zipki ...
- 基于MBT的自动化测试工具——GraphWalker介绍和实际使用
GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...
- SpringBoot与整合其他技术
SpringBoot与整合其他技术 5.1 SpringBoot整合Mybatis 5.1.1 添加Mybatis的起步依赖 <!--mybatis起步依赖--> <dependen ...
- spring-boot-starter-parent的主要作用
SpringBoot项目一般都会配置starter-parent依赖. 示例: <parent> <groupId>org.springframework.boot</g ...
- tcp协议close_wait与time_wait状态含义
题目描述 1.什么是三次握手,四次挥手?为什么分别要三次与四次? 2.tcp协议中,close_wait与time_wait状态分别代表什么含义,为什么要设计这两种状态,解决了什么问题? 3.time ...
- 【洛谷 P2597】 [ZJOI2012]灾难(LCA)
题目链接 考虑建一棵树,使一个生物灭绝时他的子树都会灭绝,显然这样答案就是以每个点为根的子树大小-1. 为什么原图不是一棵树,因为一个生物可能会以多个生物为食,所以按拓扑序来建树,把每个遍历到的点的父 ...
- 【洛谷 P5341】 [TJOI2019]甲苯先生和大中锋的字符串(后缀自动机)
题目链接 建出\(sam\),求出parent tree上每个点的\(endpos\)集合大小. 如果等于\(k\),说明到达这个点的都可以.给\((len[fa(i)],len[i]]\)的\(cn ...
- Java NIO和IO的区别
下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异. 复制代码 代码如下: IO NIO面向流 面向缓冲阻塞IO 非阻塞IO无 选择器 面向流与面向缓冲 Java NIO ...
- Flask 实现登陆 + session
Flask 实现登陆 + session 案例一: # -*- coding: utf-8 -*- # @Time : 2019/9/24 16:26 # @Author : AnWen from f ...