【蓝桥杯】试题 历届试题 回文日期【第十一届】【省赛】【A组】

该代码片段展示了一个C++程序,用于穷举并查找大于给定数字的下一个回文日期,同时确保日期是合法的。程序使用了字符串操作和条件判断来验证日期格式,并考虑了闰年的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接穷举所有可能的日期,找符合条件的。

数据量很小,比如回文只需要穷举前四位,每位10个数,那也就是10^4而已。其实不用字符串也可以,但我觉得字符串比取余要简单一些,开始的时候是用to_string,但蓝桥杯官网的oj不给过,就换了stringstream流来实现数字转字符串。

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<math.h>
#include<set>
#include<string>
#include<stack>
using namespace std;
#include<queue>
#include<sstream>

//判断是不是一个合法日期
bool isvalid(string s)
{
	int year = atoi(s.substr(0, 4).c_str());
	int month = atoi(s.substr(4, 2).c_str());
	int day = atoi(s.substr(6, 2).c_str());
	if (month > 12||month<=0)
	{
		return false;
	}
	if ((month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 11) && day > 31)
	{
		return false;
	}
	if ((month == 4 || month == 6 || month == 9 || month == 12) && day > 30)
	{
		return false;
	}
	if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
	{
		if (day > 29)
		{
			return false;
		}
	}
	else
	{
		if (day > 28)
		{
			return false;
		}
	}
	return true;
}

int main()
{
	int n = 0;
	cin >> n;
	stringstream ss;
	ss << n;
	string str = ss.str();
	string date = str;
	int date2 = 0;
//穷举下一个回文日期,日期长度共八位,穷举四位剩下四位是前四位反过来
	for (int i = 0; i <= 9; i++)
	{
		for (int j = 0; j <= 9; j++)
		{
			for (int k = 0; k <= 9; k++)
			{
				for (int t = 0; t <= 9; t++)
				{
					date2 = i * pow(10, 7) + j * pow(10, 6) + k * pow(10, 5) + t * pow(10, 4) + i + j * pow(10, 1) + k * pow(10, 2) + t * pow(10, 3);
					stringstream ss1;
					ss1 << date2;
					string str = ss1.str();
					if (date2 > n && isvalid(str))
					{
						goto A;
					}
				}
			}
		}
	}
A:
//穷举ABABBABA,就两种变量,两个循环就行
	int date3 = 0;
	for (int i = 0; i <= 9; i++)
	{
		for (int j = 0; j <= 9; j++)
		{
			date3 = i * pow(10, 7) + j * pow(10, 6) + i * pow(10, 5) + j * pow(10, 4) + j * pow(10, 3) + i * pow(10, 2) + j * pow(10, 1) + i * pow(10, 0);
			stringstream ss1;
			ss1 << date3;
			string str = ss1.str();
			if (date3 > n && isvalid(str))
			{
				goto B;
			}
		}
	}
B:
	cout << date2 << endl;
	cout << date3;
	return 0;
}

### 第十一届蓝桥杯 C++ B 概述 针对第十一届蓝桥杯C/C++ B的信息,涵盖了多个方面的内容,包括具体的比题目、解题思路以及成绩查询的方式。 #### 试题概览 该事包含了多种类型的编程挑战,具体如下: - **试题A 门牌制作** 题目涉及字符串处理和简单的逻辑判断。通过分析给定条件来决定所需的材料数量[^1]。 - **试题B 既约分数** 主要考察最大公约数算法的应用,要求计算两个整数的最大公约数并简化分数形式。 - **试题C 蛇形填数** 此类问题通常涉及到二维数的操作,按照特定模式填充数值到矩阵中。 - **试题D 跑步锻炼** 结合实际生活场景设计的问题,可能需要模拟跑步过程中的数据变化规律。 - **试题E 七段码** 关联电子显示技术的基础知识,理解如何用最少的线段表示不同的数字字符。 - **试题F 成绩统计** 数据结构与算法相结合的任务,旨在高效地管理和检索大量学生成绩记录。 - **试题G 回文日期** 日历运算加上回文特性验证,寻找符合条件的日历年份合。 - **试题H 子串分值** 动态规划或者贪心策略可以用来解决这类子序列求最优化的问题。 - **试题I 平面切分** 几何图形分割理论的实际应用案例之一,在平面上画直线实现区域划分最大化。 - **试题J 字串排序** 排序算法及其变种的应用实例,考虑特殊规则下的字符串排列顺序。 对于每一道题目都有详细的解题报告提供了解决方案和技术要点说明,并附有标准解答代码供学习参考。 #### 成绩查询方式 关于成绩查询方面,官方会公布参者的最终得分情况。一般情况下,可以通过访问竞官方网站或联系所在学校负责老师获取个人的成绩详情。此外,部分在线平台也会同步更新比结果以便选手及时查看自己的表现状况。 ```cpp // 示例:查询成绩接口伪代码 #include <iostream> using namespace std; void queryScore(string userId){ cout << "User ID: " << userId << endl; // 假设这里调用了API去服务器端拉取用户的最新成绩信息... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值