蓝桥杯2020--回文日期

在这里插入图片描述
在这里插入图片描述

解题思路

  1. 采用暴力和枚举的方法进行处理,先判断是否满足回文,如果满足再判断是否是ABAB类型,如果是则找到了结果.
  2. 处理时,第一次需要从输入日期的后一天开始进行判断

代码

#include<iostream>
#include<string>
using namespace std;
string s;
int year, month, day;
int month1, day1;
int months[13] = {
    
     0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool flag1 = false, flag = true;//flag :判断是否是第一次循环   flag1: 判断是否找到回文 
bool solve1(string s)//判断回文的方法 
{
    
    
	for (int i = 0; i <= s.size() / 2; i++) {
    
    
		if (s[i] != s[s.size() - i - 1])
		{
    
    
			return false;
		}
	}
	return true;
}

bool solve2(string s) {
    
    //判断是否是ABAB类型的 
	if (s[0] == s[2] && s[1] == s[3]) {
    
    
		return true;
	}
	return false;
}
void solve(string s)// 处理问题的方法 
{
    
    
	year = stoll(s.substr(0, 4));
	month = stoll(s.substr(4, 2));
	day = stoll(s.substr(6, 2));
	//
	for (int i = year; i; i++)//年 
	{
    
    
		if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
		{
    
    
			months[2] = 29;
		}
		else
		{
    
    
			months[2] = 28;
		}
		if (flag) {
    
    
			month1 = month;
			day1 = day + 1;
			flag = false;
		}else {
    
    
			month1 = 1;
			day1 = 1;
		}
		for (int j = month1; j <= 12; j++)//月 
		{
    
    
			for (int k = day1; k <= months[j]; k++)
			{
    
    
				s = to_string(i);
				if (j < 10)
				{
    
    
					s += "0" + to_string(j);
				}
				else {
    
    
					s += to_string(j);
				}
				if (k < 10) {
    
    
					s += "0" + to_string(k);
				}
				else {
    
    
					s += to_string(k);
				}
				//cout << s << endl;
				if (solve1(s))//判断是否是回文 
				{
    
    
					//cout << s << endl;
					if (!flag1)//如果还没找到,则这个就是最近的那个 
					{
    
    
						cout << s << endl;
						flag1 = true;
					}
					if (solve2(s)) {
    
    //判断是否是ABAB类型的回文日期 
						cout << s << endl;
						return;
					}
				}
			}
		}
	}

}
int main()
{
    
    
	cin >> s;
	solve(s);
	return 0;
}

总结

C++11 中提供了许多方便的函数,比如 整形转换成字符串 to_string(),字符串转换成整形 stoll().这些使用起来还是很方便的.另外字符串只能和字符串用 + 做拼接,如果两边一边一个整数一边一个字符串类型则会出错.

猜你喜欢

转载自blog.csdn.net/LXYDSF/article/details/114923470