2020第11届蓝桥杯C++B组(不确保答案正确性,仅供参考)2020蓝桥试题 G: 回文日期 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

2020第11届蓝桥杯C++B组(不确保答案正确性,仅供参考)2020蓝桥试题 G: 回文日期

发表时间:2020-10-17

发布人:葵宇科技

浏览次数:145

试题 G: 回文日期
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分

【问题描述】

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示 20200202 是 “千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即 2121 年 12 月 12 日。算不上 “千年一遇”,顶多算 “千年两遇”。给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA 型的回文日期各是哪一天。

【输入格式】

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

【输出格式】

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

【样例输入】

20200202

【样例输出】

20211202
21211212

试题 G: 回文日期 9
第十一届蓝桥杯大赛软件类省赛第二场 C/C++ 大学 B 组
【评测用例规模与约定】
对于所有评测用例,10000101 ≤ N ≤ 89991231,保证 N 是一个合法日期的
8 位数表示。
为防止查重系统误判,故暂时只能以图片示人

补充:非常感谢weixin_45803550这位朋友给我的代码找着了一个bug,在判断是否是ABABBABA这个地方,A与B应该不相等才是,不然就变成AAAAAAAA形式的回文串了,哎,又错了一道题,请大家引以为戒,不要再犯我这样的错误.因为月份一定小于12月,也就意味着,从10000101到11111110的测试点,我的答案都是错的.因为输出结果都有11111111

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
#include<sstream>
#include<string>

using namespace std;

bool isRun(int y) {
    return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
}
int day[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30,31,30, 31};
int getDay(int y, int m) {
    if (m != 2) {
        return day[m];
    } else if (isRun(y)){
        return 29;
    } else {
        return 28;
    }
}
stringstream ss, s1, s2;
string getStr(int y, int m, int d) {
    string str;
    ss.clear();
    s1.clear();
    s2.clear();
    string ans;
    ss << y;
    ss >> str;
    int lenStr = str.length();
    if (lenStr < 4) {
        for (int i = 0; i < 4 - lenStr; i++) {
            ans += '0';
        }
    }
    ans += str;
    s1 << m;
    s1 >> str;
    lenStr = str.length();
    if (lenStr < 2) {
        for (int i = 0; i < 2 - lenStr; i++) {
            ans += '0';
        }
    }
    ans += str;
    s2 << d;
    s2 >> str;
    lenStr = str.length();
    if (lenStr < 2) {
        for (int i = 0; i < 2 - lenStr; i++) {
            ans += '0';
        }
    }
    ans += str;
    return ans;
}

bool judgeHuiWen(string & str) {
    return str[0] == str[7] && str[1] == str[6] && str[2] == str[5] && str[3] == str[4];
}
bool judgeABBA(string & str) {	//ABABBABA
    char A = str[0];
    char B = str[1];
    return A != B && str[0] == A && str[2] == A && str[5] == A && str[7] == A &&
           str[1] == B && str[3] == B && str[4] == B && str[6] == B;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int N;
    cin >> N;
    int num = 0;
    int startY = N / 10000;
    int startM = N / 100 % 100;
    int startD = N % 100;
//	cout << startY << ' ' << startM << ' ' << startD << endl;
    int y = startY;
    string str;
    bool flagHuiWen = false, flagAB = false;
    while(y) {
        for (int m = (y == startY? startM : 1); m <= 12; m++) {
            for (int d = (y == startY? startD : 1) + 1; d <= getDay(y, m); d++) {
                str = getStr(y, m, d);
                if (!flagHuiWen && judgeHuiWen(str)) {
                    flagHuiWen = true;
                    cout << str << '\n';
                }
                if (!flagAB && judgeABBA(str)) {
                    flagAB = true;
                    cout << str << '\n';
                }
                if (flagHuiWen && flagAB) {
                    return 0;
                }
            }
        }
        y++;
    }


    return 0;
}


相关案例查看更多