洛谷 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进制数 ...
随机推荐
- Spring Cloud Alibaba学习笔记(24) - Spring Boot Actuator 监控数据可视化:Spring Boot Admin
我们都知道,Spring Boot Actuator 提供监控数据是Json数据,在某种程度来说并不利于分析查看,那么如何将其进行可视化呢?我们有很多种选择,但是目前在这个领域,最流行的是Spring ...
- Web.sitemap网站导航
全文注释: Web.sitemap导航XML文件,站点地图,功能实现菜单 1.xml的版本1.0 和编码utf-8 2.Url链接 Title显示的标题 Description描述(ToolTip) ...
- C# vb .net实现羽化效果
在.net中,如何简单快捷地实现Photoshop滤镜组中的羽化效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- html 滚动条样式
转载:https://www.cnblogs.com/yclblog/p/6806496.html /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar ...
- js两个变量互换值
js两个变量交换值 这个问题看似很基础,但是有很多的实现方式,你知道的有多少呢,网上也有很多的方法,下面就来总结一下 中间变量(临时变量) 临时变量其实很好理解,通过一个中间变量进行交换值 var s ...
- HP-UX 解压缩tar.gz
对于tar.gz包分两步: gunzip *.tar.gz 解压为tar包 tar xf *.tar 解压完成
- Android目前流行三方数据库ORM分析及对比
Android 平台上的数据库框架非常多,但是有一个共同特点就是基于对象关系映射(ORM)模型的.实现的目标也都是不需要写SQL语句,通过对对象的操作保存和操作数据.要是从语法的简洁性来说都有自己的特 ...
- Docker容器化技术(下)
Docker容器化技术(下) 一.Dockerfile基础命令 1.1.FROM - 基于基准镜像 FROM centos #制作基准镜像(基于centos) FROM scratch #不依赖任何基 ...
- visual studio故障修复
如果没有安装程序,直接在控制面板——>程序和功能,在列表中找到您安装的vs,右键选择更改,然后程序会启动,做一些准备.然后又三个选项,可以选择修复.
- 使用CIFAR-10样本数据集测试卷积神经网络(ConvolutionalNeuralNetwork,CNN)
第一次将例程跑起来了,有些兴趣. 参考的是如下URL: http://www.yidianzixun.com/article/0KNz7OX1 本来是比较Keras和Tensorflow的,我现在的水 ...