蓝桥杯 第十一届 回文日期

#include<bits/stdc++.h>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
typedef long long ll;
const int N =1e5+20;
string n,s;
int y,m,d;
struct cmp {
	bool operator()(const int&a,const int&b) const {
		return a>b;
	}
};
int month[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
//bool Valid(int m,int d) {
//	if(d>=1&&d<=month[m]) return true;
//	else return false;
//}
bool Palindrome(string s) { //第一个回文日期
	int flag =0;
	for(int i =0; i<=7; i++) {
		if(s[i]!=s[7-i]) {
			flag=1;
			break;
		}
	}
	if(flag ==0) return true;
	return false;
}
//bool Palindrome2(string s) {
//	if(s[0]==s[2]&&s[1]==s[3])
//		return true;
//	return false;
//}
int main() {
	cin >> n;
	//n="20200202";
	y=stoi(n.substr(0,4));
	m =stoi(n.substr(4,2));
	d =stoi(n.substr(6,2));
	bool flag1 =false,flag2= false;
	for(int i =y; !flag2; i++) {
		if(i%4==0&&i%100!=0||i%400==0)
			month[2]=29;
		else month[2]=28;
		//string s = to_string(i);
		//y=stoi(s.substr(0,4));
		for(int j = m; j<=12; j++) {
			for(int k =d+1; k<=month[j]; k++) {
				int flag = 0;
				//if(Valid(j,k)) {
				//string s2,s3;
				//string s;
				s= to_string(i);
				if(j>=10)
					s =s+ to_string(j);
				else s=s+'0'+to_string(j);
				if(k>=10)
					s += to_string(k);
				else s=s+'0'+to_string(k);
				//s = s1+s2+s3;
				//cout<<s<<endl;
				//if(s=="21211212") return 0;
				flag =Palindrome(s);
				if(flag&&!flag1) {
					cout <<s<<endl;
					flag1=true;
				}
				if(flag&&!flag2&&s[0]==s[2]&&s[1]==s[3]) {
					//cout<<1;
					cout<<s<<endl;
					flag2=true;
					//cout<<1;
				}
				//}
				//if(flag1&&flag2) break;
			}
			d=0;
			//if(flag1&&flag2) break;
		}
		m=1;
		//if(flag1&&flag2) break;
		//cout<<s<<endl;
		//if(i == 2122) break;
	}
	return 0;
}
//20211202
//21211212

这样是不行的 不能使用stoi函数 和 substr函数。 https://cxybb.com/article/qq_45784038/115663154 正确答案是链接

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务