//本身没什么难度,主要是对C++的熟悉
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<int> getNum(string date){
vector<int> res;
for(int i=0;i<date.size();i++){
res.push_back(date[i]-'0');
}
return res;
}
vector<int> getYear(int num){
vector<int> year(4,0);
int t=0;
int i=3;
while(num!=0){
t=num%10;
year[i]=t;
num=(num-t)/10;
i--;
}
return year;
}
bool check(vector<int> a,vector<int> b){
//检查日期是否合法
if(b[4]>1||(b[5]>2&&b[4]==1)||(b[4]==0&&b[5]==0)||b[6]>3||(b[7]==0&&b[6]==0)){
return false;
}
//检查月份
for(int i=0;i<=7;i++){
if(a[i]>b[i]){
return false;
}else if(b[i]>a[i]){
return true;
}
}
return false;
}
int getDate(vector<int> &date){
int res=0;
for(int i=0;i<date.size();i++){
res=10*res+date[i];
}
return res;
}
vector<int> getRes(int year){
//根据年费构造回文
vector<int> a=getYear(year);
vector<int> res=a;
for(int i=3;i>=0;i--){
res.push_back(a[i]);
}
return res;
}
bool checkAB(vector<int> time){
//判断是否为ABAB
int A=time[0];
int B=time[1];
for(int i=0;i<=2;i=i+2){
if(!(time[i]==A&&time[i+1]==B)){
return false;
}
}
for(int i=4;i<=6;i=i+2){
if(!(time[i]==B&&time[i+1]==A)){
return false;
}
}
return true;
}
int main()
{
// 请在此输入您的代码
string date;
cin>>date;
//获得时间
vector<int> time=getNum(date);
vector<int> initTime=time;
int year=time[0]*1000+time[1]*100+time[2]*10+time[3];
vector<int> yearTime=getYear(year);
//在年份不变的情况下变为回文
bool flag=true;
int l=3;
int r=4;
while(l>=0){
if(time[l]==time[r]){
l--;
r++;
continue;
}
flag=false;
time[r]=time[l];
}
int res1;
int res2;
//寻找第一个回文
if(!flag){
if(check(initTime,time)){
//合法即发现第一个回文
res1=getDate(time);
}else{
//不合法就对年份修改依次寻找回文
flag=true;
}
}
if(flag)
{
//对年份修改寻找回文
year++;
while(true){
time=getRes(year);
if(check(initTime,time)){
res1=getDate(time);
break;
}
year++;
}
}
//寻找ABAB型号的回文
if(check(initTime,time)&&checkAB(time)){
res2=getDate(time);
}else{
year++;
while(true){
time=getRes(year);
if(check(initTime,time)&&checkAB(time)){
res2=getDate(time);
break;
}
year++;
}
}
cout<<res1<<endl;
cout<<res2<<endl;
return 0;
}
蓝桥杯——回文日期
猜你喜欢
转载自blog.csdn.net/qq_33880925/article/details/129231941
今日推荐
周排行