蓝桥杯回文日期判断

思想:对于回文数的判断方法,最快的就是取其中一半的字符串长度,为s,然后将其进行翻转为s’ ,再把两者进行拼接即可保证是回文数,这样子就解决了枚举所有回文数的问题。
注意点:

  • 要求必须是有效日期
  • 注意闰年的2月份问题
    代码:
    (1)判断所给字符串是不是回文数
    (a) 取得前一半的数据,将原来一半和翻转后的一半进行拼接即可确保是回文数
    //transformer to string
    string s= to_string(num),t= to_string(num);
    //翻转其中一个
    reverse(t.begin() ,t.end());
    s+=t;//S一定为回文数

(b)判断日期是不是有效的

    int y= stoi(s.substr(0,4)),m=stoi(s.substr(4,2)),d= stoi(s.substr(6,2));//取出年月日
    if(y%400==0||(y%4==0&&y%100!=0))//如果是闰年
        month[1]=29;
    else
        month[1]=28;
    //接着判断月份是否超过12
    if(m<1||m>12)
        return "-1";
    else
        return s;

全部代码:

string check1(int num)
{
   

    //transformer to string
    string s= to_string(num),t= to_string(num);
    //翻转其中一个
    reverse(t.begin() ,t.end());
    s+=t;
    int y= stoi(s.substr(0,4)),m=stoi(s.substr(4,2)),d= stoi(s.substr(6,2));//取出年月日
    if(y%400==0||(y%4==0&&y%100!=0))//如果是闰年
        month[1]=29;
    else
        month[1]=28;
    //接着判断月份是否超过12
    if(m<1||m>12)
        return "-1";
    else
        return s;
}

常见函数:

to_string()//int转为字符串
reverse()//字符翻转
substr(0,4)//0是指起点位置,4是指复制4个,即从0号字符开始,复制四个作为返回值

(2)判断是不是ABABBABA类型的回文数

//判断是否是ABABBABA类型的回文数
string  check2(int num)
{
   
    //transformer to string
    string s= to_string(num),t= to_string(num);
    //翻转其中一个
    reverse(t.begin() ,t.end());
    s+=t;

    if(s[0]==s[2]&&s[1]==s[3])
        return s;
    else
        return "-1";

}

整个项目工程如下:
huiwen.cpp


// Created by HP on 2024/1/7.
//判断是否是回文数
#include "huiwen_number.h"

int date;
int month[12]={
   31,28,31,30,31,30,31,30,31,30,31,30};//初始化每月天数
/*------------------- 判断是否是一个回文数---------------------
 * 判断回文数,只需要判断前半部分是不是回文数,然后翻转拼接即可
 *
 *
*/

//判断日期是否合法
string check1(int num)
{
   

    //transformer to string
    string s= to_string(num),t= to_string(num);
    //翻转其中一个
    reverse(t.begin() ,t.end());
    s+=t;
    int y= stoi(s.substr(0,4)),m=stoi(s.substr(4,2)),d= stoi(s.substr(6,2));//取出年月日
    if(y%400==0||(y%4==0&&y%100!=0))//如果是闰年
        month[1]=29;
    else
        month[1]=28;
    //接着判断月份是否超过12
    if(m<1||m>12)
        return "-1";
    else
        return s;
}
//判断是否是ABABBABA类型的回文数
string  check2(int num)
{
   
    //transformer to string
    string s= to_string(num),t= to_string(num);
    //翻转其中一个
    reverse(t.begin() ,t.end());
    s+=t;

    if(s[0]==s[2]&&s[1]==s[3])
        return s;
    else
        return "-1";

}


huiwen.h

//
// Created by HP on 2024/1/7.
//
#include <iostream>
#include "string"
using namespace std;
#include "algorithm"
#ifndef HUIWEN_NUMBER_H
#define HUIWEN_NUMBER_H
extern int date;
extern int month[12];//初始化每月天数
string check1(int num);
string  check2(int num);
#endif //CHAPTER1_HUIWEN_NUMBER_H

main.cpp

#include <iostream>
#include "huiwen_number.h"
using namespace std;

int main()
{
   
string  ans1="";
/* -------------------判断是否是回文数的蓝桥杯题目---------------------*/
cout<<"请你输入一个日期"<<endl;
cin>> date;//date回文.h文件中有定义了
for(int i=date/10000;;i++)
{
   
    if(check1(i)=="-1"||check1(i)== to_string(date))
        continue;
    else
    {
   
        if(ans1=="")
            ans1= check1(i);
        if(check2(i)!="-1")
        {
   
            cout<<ans1<<"\n"<<check2(i)<<endl;
            break;
        }

    }

}
    return 0;


}



CMakelist.txt

cmake_minimum_required(VERSION 3.26)
project(chapter1)

set(CMAKE_CXX_STANDARD 17)

add_executable(chapter1 main.cpp
        huiwen_number.cpp
        huiwen_number.h)

在这里插入图片描述

相关推荐

  1. 题目-日期

    2024-01-13 19:36:03       67 阅读
  2. 判断-

    2024-01-13 19:36:03       67 阅读
  3. [ 2016枚举]日期

    2024-01-13 19:36:03       52 阅读
  4. 求解数(栈求解版本)

    2024-01-13 19:36:03       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-13 19:36:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-13 19:36:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-13 19:36:03       87 阅读
  4. Python语言-面向对象

    2024-01-13 19:36:03       96 阅读

热门阅读

  1. 三国杀移动版武将台词大全-群

    2024-01-13 19:36:03       66 阅读
  2. 微信小程序跳转方式及问题

    2024-01-13 19:36:03       65 阅读
  3. 独立按键控制继电器开关

    2024-01-13 19:36:03       65 阅读
  4. php文件实战分析

    2024-01-13 19:36:03       58 阅读
  5. QT 应用程序在 Windows 系统上出现中文乱码

    2024-01-13 19:36:03       61 阅读
  6. 【SPDK】【NoF】使用SPDK部署NVMe over TCP

    2024-01-13 19:36:03       51 阅读
  7. js join方法的使用

    2024-01-13 19:36:03       62 阅读
  8. 【算法笔记】分治专题

    2024-01-13 19:36:03       54 阅读
  9. 【JVM之再阅读】

    2024-01-13 19:36:03       58 阅读
  10. Go语言中的同步原语:ErrGroup、Semaphore和SingleFlight

    2024-01-13 19:36:03       70 阅读
  11. 网络设备远程运维管理解决方案

    2024-01-13 19:36:03       65 阅读