AcWing 2867. 回文日期(每日一题)

简介: AcWing 2867. 回文日期(每日一题)

原题链接:2867. 回文日期 - AcWing题库

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


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


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


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


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


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


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


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


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


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


注意


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


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


输入格式


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


输出格式


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


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


数据范围


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

输入样例:

20200202

输出样例:

20211202
21211212

模拟题,按照思路直接写即可,注意判断闰年和月份。

AC代码:

#include<iostream>
using namespace std;
bool found1=false,found2=false;//found1为下一个回文日期判断是否找到,found2ABABBABA 型的回文日期
int months[]={0,31,28,31,30,31,30,31,31,30,31,30,31};//月份天数数组
int is_leap(int year){//判断是否为闰年
  if(year%4==0&&year%100||year%400==0){
    return 1;
  }
  return 0;
}
int get_day(int year,int month){//获取天数
  if(month==2){
    return 28+is_leap(year);
  }
  return months[month];
}
void next_day(int &y,int &m,int &d){//自增到下一天
  d++;
  if(d>get_day(y,m)){
    d=1;
    m++;
    if(m>12){
      m=1;
      y++;
    }
  }
}
bool cheak1(char s[]){//判断日期是否为回文日期
  for(int i=0,j=7;i<j;i++,j--){
    if(s[i]!=s[j]){
      return false;
    }
  }
  return true;
}
bool cheak2(char s[]){//判断是否为ABABBABA 型的回文日期
  char a=s[0];
  char b=s[1];
  char c=s[2];
  char d=s[3];
  if(a==c&&b==d&&a!=b){
    return true;
  }
  return false;
}
int main(){
  int y,m,d;
  char s[10];//中介作用,负责转化
  scanf("%04d%02d%02d",&y,&m,&d);
  while(!found1||!found2){
    next_day(y,m,d);
    sprintf(s,"%04d%02d%02d",y,m,d);
    if(cheak1(s)){
      if(!found1){
        found1=true;
           puts(s);
      }
      if(!found2&&cheak2(s)){
      found2=true;
      puts(s);
        }
    }
  }
  return 0;
}

文章尚有不足,请各位大佬指出,共同冲刺蓝桥杯。


相关文章
|
安全 Cloud Native Linux
CMake Install:深度解析与实践(二)
CMake Install:深度解析与实践
478 0
|
编解码 算法 关系型数据库
物理层系统设计架构及关键技术 | 带你读《5G 无线系统设计与国际标准》之六
物理层的设计是整个 5G 系统设计中最核心的部分。相对于 4G,ITU 及 3GPP 对 5G提出了更高而且更全面的关键性能指标要求。其中最具有挑战的峰值速率、频谱效率、用户体验速率、时延等关键指标均需要通过物理层的设计来达成。为迎接这些挑战,5G的新空口设计在充分借鉴 LTE 设计的基础上,也引入了一些全新的设计。
物理层系统设计架构及关键技术 | 带你读《5G 无线系统设计与国际标准》之六
|
Linux
Linux tmp目录自动清理总结
在Linux系统中/tmp文件夹下的文件是会被清理、删除的,文件清理的规则是如何设定的呢? 以Redhat为例,这个主要是因为作业里面会调用tmpwatch命令删除那些一段时间没有访问的文件。   那么什么是tmpwatch呢?其实tmpwatch是一个命令或者说是一个包。
4226 0
|
消息中间件 监控 Java
利用Java构建高效的消息推送系统
利用Java构建高效的消息推送系统
|
存储 算法 C++
【算法】哈希映射(C/C++)
【算法】哈希映射(C/C++)
|
前端开发
windows10 安装node npm 等前端环境 并配置国内源
windows10 安装node npm 等前端环境 并配置国内源
943 3
|
Ubuntu 计算机视觉
Ubuntu新手友好:OpenCV 4.6.0安装的简化教程
网络首发,一定可以成功 依赖环境
884 0
|
移动开发 JavaScript 定位技术
百度地图开发:地图调起API(Web端)使用终点经纬度直接调用百度地图导航信息的解决方案
百度地图开发:地图调起API(Web端)使用终点经纬度直接调用百度地图导航信息的解决方案
901 0
|
安全 关系型数据库 MySQL
MySQL:TABLE_SCHEMA及其应用
MySQL:TABLE_SCHEMA及其应用
485 1
|
存储 关系型数据库 数据库
在 Postgres 中使用更改列类型
【8月更文挑战第11天】
975 0
在 Postgres 中使用更改列类型

热门文章

最新文章