蓝桥杯题目-回文日期

链接

回文日期 - 蓝桥云课 (lanqiao.cn)

知识点

模拟,暴力,枚举

思路

1、将输入的整数以字符串形式输入,在分别转为int类型的year、month、day。

2、枚举年月日,把不合法的日期以及不符和题目要求的日期去掉,再将年月日分别转为指定位数的字符串,之后再将年月日对应的字符串拼接起来,形成题目要求的日期字符串,再判断日期字符串是否为回文字符串和ABABBABA 型字符串。

代码

#include<bits/stdc++.h>
using namespace std;

//将字符串转为int类型 
int s2i(string s){ 
	int res=0;
	for(auto i : s){
		res = res*10 + i - '0';
	}
	return res;
}

//将int类型转为指定位数的字符串
string i2s(int a,int n){  
	string s;
	while(a){
		int m = a % 10;
		s += m + '0';
		a /= 10;
	}
	while(s.size() < n){
		s += '0';
	}
	reverse(s.begin(),s.end());
	return s;
}

//判断是否为闰年 
bool isLeapYear(int year){  
	if((year % 4 == 0 && year % 100 != 0) && (year %400 == 0)){
		return true;
	}
	return false;
}

//判断日期是否合法 
bool isDay(int year,int month,int day){
	int nums[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
	if(isLeapYear(year)){
		nums[2] = 29;
	}
	if(day > nums[month]){
		return false;
	}
	return true;
}

//判断是否为回文字符串 
bool isPalindrome(string s){
	for(int i=0; i <= s.size()/2; i++){
		if(s[i]!=s[s.size() - i - 1]){
			return false;
		}
	}
	return true;
}

//判断是否为ABABBABA型字符串 
bool isAB(string s){
	if(!isPalindrome(s)){
		return false;
	}
	if(s[0]==s[2] && s[1]==s[3]){
		return true;
	}
	return false;
}

int main(){
	string s;
	cin>>s;
	int year = s2i(s.substr(0,4));
	int month = s2i(s.substr(4,2));
	int day = s2i(s.substr(6,2));
	bool ans1 = false,ans2 = false;
	for(int i = year;i <= 9999 ;i++){
		for(int j = 1;j <= 12; j++){
			for(int k=1; k <= 31;k++){
				if(i == year && j == month && k <= day){
					continue;
				}
				if(!isDay(i,j,k)){
					continue;
				}
				string date = i2s(i,4) + i2s(j,2) + i2s(k,2);
				if(!ans1 && isPalindrome(date)){
					cout<<date<<endl;
					ans1 = true;
				}
				if(!ans2 && isAB(date)){
					cout<<date<<endl;
					ans2 = true;
				}
			}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值