您好,欢迎来到九壹网。
搜索
您的当前位置:首页P8716 [蓝桥杯 2020 省 AB2] 回文日期

P8716 [蓝桥杯 2020 省 AB2] 回文日期

来源:九壹网

题目描述:

2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 yyyymmdd 的格式写成一个 88 位数是 20200202,恰好是一个回文数。我们称这样的日期是回文日期。

有人表示 20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期:20211202 即 2021 年 12 月 2 日。

也有人表示 20200202 并不仅仅是一个回文日期,还是一个 ABABBABA 型的回文日期。对此小明也不认同,因为大约 100100 年后就能遇到下一个 ABABBABA 型的回文日期:21211212 即 2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个 ABABBABA 型的回文日期各是哪一天。

输入格式

输入包含一个八位整数 �N,表示日期。

输出格式

输出两行,每行 11 个八位数。第一行表示下一个回文日期,第二行表示下 一个 ABABBABA 型的回文日期。

输入输出样例

输入 #1复制

20200202

输出 #1复制

20211202
21211212

说明/提示

对于所有评测用例,10000101≤�≤9220022910000101≤N≤92200229,保证 �N 是一个合法日期的 88 位数表示。

蓝桥杯 2020 第二轮省赛 A 组 G 题(B 组 G 题)。

解题思路:

采用枚举的方法,以输入的时间点为起始位置,将其转化为年月日,一天一天进行累加,此处需要对日期进制进行简单处理,将回文类型和特殊ab类回文类型进行bool类型判断。最后通过两个while循环分别求出日期。需要注意年月的‘0’处理。

样例代码:

#include <iostream>
#include <stdio.h>
using namespace std;

int getmonthday(int year, int month)//检查月份
{
	int arr[13] = { -1,31,28,31,30,31,30,31,31,30,31,30,31 };
	if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))
	{
		return 29;
	}
	else
	{
		return arr[month];
	}
}
bool checkback(int year, int month, int day)//检查回文
{
	int ge = year % 10;
	ge = ge * 10;
	int shi = year / 10 % 10;
	int bai = year / 100 % 10;
	bai = bai * 10;
	int qian = year / 1000;
	if (ge + shi == month && bai + qian == day)
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool checkabab(int year, int month, int day)//检查ababbaba类型回文
{
	if (checkback(year, month, day) && month == day)
	{
		return true;
	}
	else
	{
		return false;
	}
}

int main()
{
	int n;
	cin >> n;
	int day = n % 100;
	int month = n / 100 % 100;
	int year = n / 10000;
	while (!(checkback(year,month,day)))
	{
		day++;
		if (day > getmonthday(year, month))
		{
			month++;
			day = 1;
			if(month > 12)
			{
				year++;
				month = 1;
			}
		}
	}
	if (day < 10 && month < 10)
	{
		cout << year << "0" << month << "0" << day << endl;
	}
	else if (day < 10 && month >= 10)
	{
		cout << year << month << "0" << day << endl;
	}
	else if (day > 10 && month < 10)
	{
		cout << year << "0" << month << day << endl;
	}
	else
	{
		cout << year << month << day << endl;
	}
	while (!(checkabab(year, month, day)))
	{
		day++;
		if (day > getmonthday(year, month))
		{
			month++;
			day = 1;
			if (month > 12)
			{
				year++;
				month = 1;
			}
		}
	}
	if (day < 10 && month < 10)
	{
		cout << year << "0" << month << "0" << day << endl;
	}
	else if (day < 10 && month >= 10)
	{
		cout << year << month << "0" << day << endl;
	}
	else if (day > 10 && month < 10)
	{
		cout << year << "0" << month << day << endl;
	}
	else
	{
		cout << year << month << day << endl;
	}
	return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务