【蓝桥杯系列】2020省赛真题之回文日期

news2024/11/25 6:45:42

⭐️前面的话⭐️

本篇文章介绍来蓝桥杯真题之回文日期的题解,展示语言java。

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2023年1月10日🌴
✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《算法》,📚《算法导论》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


📌导航小助手📌

  • ⭐️2020省赛真题之回文日期⭐️
    • 🔐题目详情
    • 💡解题思路
    • 🔑源代码
  • 🌱总结


封面


⭐️2020省赛真题之回文日期⭐️

🔐题目详情

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

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

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

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

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

对于所有评测用例, 10000101 ≤ N ≤ 89991231 10000101 \leq N \leq 89991231 10000101N89991231,保证 N 是一个合法日期的 8 位数表示。

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

输入输出样例
示例
输入

20200202

输出

20211202
21211212

运行限制
最大运行时间:1s
最大运行内存: 256M

💡解题思路

将日期年月日与题目所给 8 8 8位字符串进行互相转换,日期模拟日期变化,格式化字符串用来判断回文,注意,该题判断回文有两种,一种是直接的回文判断,另外一种是判断 A B A B B A B A ABABBABA ABABBABA型的回文字符串,均可以使用双指针模拟实现。

解题思路很简单,一直将日期按照天模拟递推,然后判断是否是满足题意的回文串,满足则输出即可,找到两个满足题意的回文串就可以了。

🔑源代码

java

import java.util.Scanner;
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    private static int[] mToD = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    //判断闰年
    private static boolean isOk(int y) {
        return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0);
    }
    //格式化字符串转换成int年月日
    private static int[] transDate(String s) {
        int[] res = new int[3];
        char[] cs = s.toCharArray();
        res[0] = (cs[0] - '0') * 1000 + (cs[1] - '0') * 100 + (cs[2]- '0') * 10 + (cs[3] - '0');
        res[1] = (cs[4] - '0') * 10 + (cs[5] - '0');
        res[2] = (cs[6] - '0') * 10 + (cs[7] - '0');
        return res;
    }

    //判断下一个回文
    private static boolean isPd(String s) {
        char[] cs = s.toCharArray();
        int l = 0;
        int r = cs.length - 1;
        //char a = cs[0];
        //char b = cs[1];
        while (l < r) {
          //char t = b;
          //if (l == 0 || l == 2) t = a;

          if (cs[l] != cs[r]) return false;
          l++;
          r--;
        }
        return true;
    }
    //判断ABABBABA 型的回文日期
    private static boolean isPdPlus(String s) {
        char[] cs = s.toCharArray();
        int l = 0;
        int r = cs.length - 1;
        char a = cs[0];
        char b = cs[1];
        while (l < r) {
          char t = b;
          if (l == 0 || l == 2) t = a;

          if (cs[l] != cs[r] || cs[l] != t) return false;
          l++;
          r--;
        }
        return true;
    }
    //格式化日期
    private static String transString(int[] date) {
        StringBuilder sb = new StringBuilder();
        String ts = "0000" + date[0];
        sb.append(ts.substring(ts.length() - 4, ts.length()));
        ts = "0" + date[1];
        sb.append(ts.substring(ts.length() - 2, ts.length()));
        ts = "0" + date[2];
        sb.append(ts.substring(ts.length() - 2, ts.length()));

        return sb.toString();
    }
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        String s = scan.nextLine();

        int[] date = transDate(s);
        //模拟
        //是否是初始日期
        boolean first = true;
        //第一个回文是否找到
        boolean hasAns1 = false;
        //第二个ABABBABA回文串是否找到
        boolean hasAns2 = false;
        int cnt = 0;
        while (cnt < 2) {
            if (isOk(date[0])) mToD[2] = 29;
            else mToD[2] = 28;

            if (date[2] >= mToD[date[1]]) {
                date[2] = 1;
                date[1]++;
                if (date[1] == 13) {
                    date[1] = 1;
                    date[0]++;
                }
            } else {
                date[2]++;
            }
            //System.out.println(Arrays.toString(date));
            if (!first && !hasAns1 && isPd(transString(date))) {
                System.out.println(transString(date));
                hasAns1 = true;
                cnt++;
            }
            if (!first && !hasAns2 && isPdPlus(transString(date))) {
                System.out.println(transString(date));
                hasAns2 = true;
                cnt++;
            }
            first = false;
        }

        scan.close();
    }
}

🌱总结

一道不难但麻烦的模拟题。


觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

1-99

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/154301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS基础实验操作100例--实验81创建点群最小边界几何

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验81 创建点群最小边界几何 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

MySQL是怎么保证高可用的?

在上一篇文章中,我和你介绍了 binlog 的基本内容,在一个主备关系中,每个备库接收主库的 binlog 并执行。 正常情况下,只要主库执行更新生成的所有 binlog,都可以传到备库并被正确地执行,备库就能达到跟主库一致的状态,这就是最终一致性。 但是,MySQL 要提供高可用能力…

Python中zipfile压缩包模块的使用

本文主要介绍了Python中zipfile压缩包模块的使用&#xff0c;zipfile 模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具&#xff0c;本文做一个简单的总结。 简介 ZIP 文件格式是一个常用的归档与压缩标准&#xff0c;zipfile 模块提供了创建、读取、写入、添加及列出 …

如何通过QA质量管理提高软件质量?

1、构建了质量检查系统 为了保证软件开发质量&#xff0c;一般来说QA检查单按照检查阶段划分为&#xff1a;需求分析、系统设计、系统实现、系统测试、交付验收、系统运维。 QA质量管理&#xff1a;CoCode项目管理 QA质量管理——QA检查单​ 为了进一步提高检查效果&…

【笔记:第4课】学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春

文章目录前言来源正文小结前言 创作开始时间&#xff1a;2023年1月10日22:41:26 如题&#xff0c;学习一下RISC-V。 来源 https://www.bilibili.com/video/BV1Q5411w7z5?p4&vd_source73a25632b4f745be6bbcfe3c82bb7ec0 正文 操作系统&#xff1a;POSIX 标准。 LLVM有…

ArcGIS基础实验操作100例--实验80随机采样统计

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验80 随机采样统计 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

2022年度总结——一切都在慢慢变好

人生天地之间&#xff0c;若白驹过隙&#xff0c;忽然而已&#xff0c;每个人都希望留下自己的足迹。——题记日月两盏灯&#xff0c;春秋一场梦。回想一年前的现在我在干什么呢&#xff1f;去年的寒假我刚步入大学一个学期&#xff0c;迷茫彷徨&#xff0c;怅然若失&#xff0…

Promise处理异步的并行和串行

一、异步的“并行” 同时处理&#xff0c;相互之间没啥依赖 // 执行FN1返回一个promise实例&#xff0c;实例中管理了一个异步编程的代码&#xff0c;当定时器到时间后&#xff0c;才会把实例的状态改为成功 const fn1 () > {return new Promise(resolve > {setTimeou…

nginx使用!

一&#xff1a;概述 Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好&#xff0c;中国大陆使用 Nginx 网站用户有&#xff1a;百度、京…

NTN(二) Timing Advance

微信同步更新欢迎关注同名modem协议笔记 地面移动系统的传播延迟通常小于 1 毫秒。 相比之下&#xff0c;NTN 中的传播延迟要长得多&#xff0c;延迟从几毫秒到数百毫秒不等&#xff0c;具体取决于星载或机载平台的高度以及 NTN 中的payload类型。 因此对NTN系统&#xff0c;处…

Java 脚本引擎的使用

1. 前言 Java 6 版本就已经引入了 Rhino 引擎用以支持脚本代码运行&#xff0c;而从 Java 8 开始 Nashorn 取代 Rhino 成为 Java 内嵌的 JavaScript 引擎。Nashorn 引擎允许开发人员将 JavaScript 代码嵌入到 Java 中执行&#xff0c;这个特性在复杂的配置系统中有比较大的应用…

javascript reduce()方法

相信挺多人对这个方法还是那么的陌生&#xff0c;其实也能理解&#xff0c;毕竟它能做到的事情还有其他的方法能做到。下面就说一下我个人的理解吧&#xff01;&#xff01;&#xff01;reduce()方法&#xff1a;用法&#xff1a;array.reduce(function(total,currentData,curr…

管理bug的工具

一、国内的bug管理软件&#xff1a; 1、禅道 禅道是第一款国产开源项目管理软件。它的核心管理思想基于敏捷方法scrum&#xff0c;内置了产品管理和项目管理&#xff0c;同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能。在一个软件中就…

nodejs+vue+element+eachers构建开源项目大型连续剧(5)前端请求封装,完成用户注册。

在前端项目开发中&#xff0c;一个好的请求封装可以给我们带来诸多便利&#xff0c;减少了代码重复&#xff0c;优化了问题处理等。那接下来我们一起学习一下怎么做到对一个请求的简单封装吧。主要通过对axios请求的二次封装&#xff0c;实现页面的请求以及必要的优化。 一、引…

Word处理控件Aspose.Words功能演示:在 C# 中将 Word DOC DOCX 转换为 Markdown

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

每个Java程序员都必须知道的四种负载均衡算法

前言 一般来说&#xff0c;我们在设计系统的时候&#xff0c;为了系统的高扩展性&#xff0c;会尽可能的创建无状态的系统&#xff0c;这样我们就可以采用集群的方式部署&#xff0c;最终很方便的根据需要动态增减服务器数量。但是&#xff0c;要使系统具有更好的可扩展性&…

【UE4 第一人称射击游戏】32-添加击杀AI的提示功能(使用到控件蓝图的动画功能)

上一篇&#xff1a;【UE4 第一人称射击游戏】31-更好的UI界面本篇效果&#xff1a;可以看到在击杀AI后&#xff0c;右上角有击杀提示信息步骤&#xff1a;新建一个控件蓝图命名为“KillPopup”双击打开“KillPopup”&#xff0c;拖入一个图像控件&#xff0c;锚点设置为右上角&…

RobotFramework测试库

在RF 测试库里面&#xff0c;分为三种测试库标准测试库扩展测试库远程测试库标准测试库随 Robot Framework 版本一同发布的测试库&#xff0c; 不需要单独安装&#xff0c;但部分标准库仍然需要手动导入标准库有扩展测试库标准库以外的其他测试库都统称为扩展测试库&#xff0c…

OceanBase产品家族及基础概念

第二章&#xff1a;OceanBase产品家族及基础概念 1. OceanBase产品家族 1.1 OceanBase数据库产品家族 1.2 OceanBase数据库内核 1.2.1 高扩展 • 水平扩展 • 按需在线扩容、缩容、不停服务 • 单集群突破100台服务器 1.2.2 高性能 • 峰值6,100万次/秒&#xff08;真实业…

P12 PyTorch 常见函数梯度

目录&#xff1a;1&#xff1a; 常见函数的导数2: 梯度与微分的关系3: 常见函数的梯度4&#xff1a; 梯度更新常见问题一 常见函数的导数&#xff08;复合函数求导证明&#xff09;二 梯度与微分的关系2.1 微分&#xff1a; x 为一元变量时微分&#xff1a; x 为向量时微分矩阵…