C/C++教程

蓝桥杯,c++/c,试题 历届试题 回文日期

本文主要是介绍蓝桥杯,c++/c,试题 历届试题 回文日期,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

试题 历届试题 回文日期

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是 ,恰好是一个回文数。我们称这样的日期是回文日期。

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

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

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

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

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

样例输入
20200202
Data
样例输出
20211202
21211212
Data
评测用例规模与约定
对于所有评测用例,, 保证 是一个合法日期的 8 位数表示。
思路:只要认真研究,有什么特殊的情况,这条题目其实很简单,乍一看,我们第一时间会想到直接从0-99999999循环验证,但是这是回文日期,不是回文数,日期,年月日不能为零,并且,你的月份不能超过12,天数最多不能超过31,而且当你在闰年的时候,月份的天数是不一样的,所以这里我们要熟悉判断闰年的经典程序语句

if((year%100!=0&&year%4==0)||year%400==0)

注意,以上语句基本适用各种日期类题目!!
还有,我们要熟知基本日期类题目套路程序思想,标明月份天数,判断是否闰年,当月份达到12时,星期到达7,天数到本月的天数极限的时候,要重新将其变量初始化。

int month_days[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};

以下为参考代码

#include<bits/stdc++.h>
using namespace std;
int a[9];//

int month_day[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};
int year,month=1,day=1;
//判断i是否为合法年份
bool judge(){
    if((year%100!=0&&year%4==0)||year%400==0){
        month_day[2]=29;
    }
    else{
        month_day[2]=28;
    }
    if(day<=month_day[month]&&month<=12&&month!=0&&day!=0&&year!=0){
        return true;
    }
    return false;
}

int main(){
    int n;
    cin>>n;
    int cnt=0;
    for(int i=n+1;i<=99991231;i++){
        year=i/10000;
        day=i%100;
        month=i/100%100;
        if(!judge()){
           continue;
        }
        int i1=i;
        int j=1;
        while(i1){
            a[j]=i1%10;
            i1/=10;
            j++;
        }
        int t=1;
        for(int k=1;k<=4;k++){
            if(a[k]!=a[8-k+1]){
                t=0;
            }
        }
        if(t==0){
            continue;
        }
        else{
            cnt++;
            int x=a[1],y=a[2];
            if(cnt==1){
                cout<<i<<endl;
                //判断这是回文日期,还得判断他是否是ab形,因为回文日期和ab形可能会相等。
                if(a[3]==x&&a[6]==x&&a[8]==x&&a[4]==y&&a[5]==y&&a[7]==y){
                    cnt++;
                    cout<<i<<endl;
                }
            }
            else if(cnt==2){
                if(a[3]==x&&a[6]==x&&a[8]==x&&a[4]==y&&a[5]==y&&a[7]==y){
                    cout<<i<<endl;
                }
                else{
                    cnt--;
                }
            }
        }
        if(cnt==2){
            break;
        }
    }
    return 0;
}

这篇关于蓝桥杯,c++/c,试题 历届试题 回文日期的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!