[蓝桥杯 2020 省 AB2] 回文日期

简介: [蓝桥杯 2020 省 AB2] 回文日期

题目描述

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 yyyymmdd 的格式写成一个 88 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。


有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。


也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。


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


输入格式

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

输出格式

输出两行,每行 1 个八位数。第一行表示下一个回文日期,第二行表示下 一个 ABABBABA 型的回文日期。

输入输出样例

输入

20200202

输出

20211202

21211212


说明/提示

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

蓝桥杯 2020 第二轮省赛 A 组 G 题(B 组 G 题)。

#include<iostream>
#include<algorithm>
using namespace std;
int m[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int check1(int x, int y, int z)
{
    int g[9];
    g[8] = z % 10;
    g[7] = z / 10;
    g[6] = y % 10;
    g[5] = y / 10;
    g[4] = x % 10;
    g[3] = x / 10 % 10;
    g[2] = x / 100 % 10;
    g[1] = x / 1000;
    for (int i = 1, j = 8; i < j; i++, j--)
    {
        if (g[i] != g[j]) return 0;
    }
    return 1;
}
int check2(int x, int y, int z)
{
    int g[9];
    g[8] = z % 10;
    g[7] = z / 10;
    g[6] = y % 10;
    g[5] = y / 10;
    g[4] = x % 10;
    g[3] = x / 10 % 10;
    g[2] = x / 100 % 10;
    g[1] = x / 1000;
    if (g[1] == g[3] && g[1] == g[6] && g[1] == g[8]
        && g[2] == g[4] && g[2] == g[5] && g[2] == g[7])
        return 1;
    else  return 0;
}
int main()
{
    int g;
    cin >> g;
    int year1 = g / 10000, 
        month1 = g / 100 % 10 + g / 1000 % 10 * 10, 
        day1 = g % 10 + g / 10 % 10 * 10;
    int flag1 = 0, flag2 = 0, cnt = 0;
    int a1, a2, b1, b2, c1, c2;
    for (int year= year1; year < 9999; year++)
    {
        if (year % 4 == 0 && year % 1 != 0 || year % 400 == 0) m[2] = 19;
        else m[2] = 28;
        for (int month = 1; month < 13; month++)
        {
            for (int day=1; day <= m[month]; day++)
            {
                if (year == year1 && month == month1 && day == day1) continue;
                if (flag1 == 0)
                {
                    if (check1(year, month, day))
                    {
                        a1 = year, b1 = month, c1 = day;
                        flag1 = 1;
                    }
                }
                if (flag2 == 0)
                {
                    if (check2(year, month, day))
                    {
                        a2 = year, b2 = month, c2 = day;
                        flag2 = 1;
                    }
                }
                if (flag1 == 1 && flag2 == 1)
                {
                    printf("%d%02d%02d\n", a1, b1, c1);
                    printf("%d%02d%02d\n", a2, b2, c2);
                    return 0;
                }
            }
        }
    }
    return 0;
}
目录
相关文章
|
4月前
|
C++
第十三届蓝桥杯B组C++(试题B:顺子日期)
第十三届蓝桥杯B组C++(试题B:顺子日期)
51 0
|
10月前
【蓝桥杯冲刺】日期类专题特训
【蓝桥杯冲刺】日期类专题特训
32 0
|
11月前
[蓝桥杯 2017 省 B] 日期问题
[蓝桥杯 2017 省 B] 日期问题
74 0
|
11月前
题目 2571: 蓝桥杯2020年第十一届省赛真题-回文日期
题目 2571: 蓝桥杯2020年第十一届省赛真题-回文日期
第14届蓝桥杯第三次模拟赛:3日期相等
第14届蓝桥杯第三次模拟赛:3日期相等
72 0
|
Java 测试技术 C语言
【蓝桥杯基础题】2020年省赛填空题—回文日期
【蓝桥杯基础题】2020年省赛填空题—回文日期
190 0
【蓝桥杯基础题】2020年省赛填空题—回文日期
|
Python
蓝桥杯 试题G 回文日期 Python 枚举法
蓝桥杯 试题G 回文日期 Python 枚举法
56 0
蓝桥杯 试题G 回文日期 Python 枚举法
|
Java 测试技术
第十一届蓝桥杯A组省赛试题 G: 回文日期(Java)
第十一届蓝桥杯A组省赛试题 G: 回文日期(Java)
223 0
|
3月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
57 0