java基础题填空题

 一、题目背景 本题为2020年省赛填空题 C/C++A组第7题 C/C++B组第7题 Java A组第7题 二、题目描述 1.问题描述 2020 java基础题填空题 年春节期间,有一个特殊的日期引起了大家的注意: 。因为如果将这个日期按的格式写成一个 位数是,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示 是“千年一遇”的特殊日子。对此小明很不认同,因为不到 2




一、题目背景

本题为2020年省赛填空题

  • C/C++A组第7题
  • C/C++B组第7题
  • Java A组第7题

二、题目描述

1.问题描述

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

有人表示 是“千年一遇”的特殊日子。对此小明很不认同,因为不到 2 年之后就是下一个回文日期: 即
也有人表示 并不仅仅是一个回文日期,还是一个 型的回文日期。对此小明也不认同,因为大约 年后就能遇到下一个型的回文日期: 即 。算不上“千年一遇”,顶多算“千年两遇”。

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

2.输入格式

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

3.输出格式

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

4.一个例子

下面是一个样例

输入:


输出:


5. 评测用例规模与约定

对于所有评测用例,,保证 是一个合法日期的位数表示。

运行限制

  • 最大运行时间:
  • 最大运行内存:

三、题目分析

和2021省赛的卡片题目一样,如果我们有办法将所有回文日期的八位数全部枚举出来,是不是就可以解决问题了呢?现在问题就转化为:怎样枚举和怎样检查。
我们仔细观察一下两种回文日期的格式。
第一种:
第二种:
我们可以设置下标从的数组,代表日期的每一位数字的大小。
那么对于第一种回文日期,只需要满足如下条件


对于第二种回文日期(),只需要满足如下条件


1.获取位数

利用取余的方法获取每一位的位数,如果不会的可以看下2021省赛-卡片。


2.回文检查

依旧以C语言写回文日期的检查代码。
注意:C语言中没有bool类型和String类型。
C++代码也会放在后面,但是整体思路一样。

检查第一种回文日期


检查第二种回文日期


3.枚举限制

可能会有很多人写出下面的枚举情况


其实这样确实可以枚举出答案,但是,这样枚举不符合题目的标准。并且也会枚举出大量不是日期但符合回文标准的数字。
所以,我们应该对枚举的数也进行检查,要求限制它必须为有效的年月日。
在这里插入图片描述

进行日期限制

一年只有12个月,每个月的天数都不同,所以可以用12个数组来模拟每一个月的天数,这样只需要判断月份是不是属于1~12,天数是不是符合当前月份的天数。
但是,这里 有个小坑,那就是闰年!闰年的二月天数是29天,而不是28天。


  • (1)定义每个月的天数
  • (2)计算年份
  • (3)计算月份
  • (4)计算第几天
  • (5)判断是不是闰年
  • (6)闰年二月天数为29
  • (7)非闰年二月天数为28
  • (8)判断是不是符合日期标准

四、代码汇总

1.C语言代码


2. C++代码

C++里面有很多C语言没有的东西。
比如: string类型
有了这个类型,玩的花样就多了不少。
同时 to_string 可以将数字常量转换为字符串,返回值为转换完毕的字符串。


五、总结

1.回文判断

回文都是对称结构,只需要让对称的部分相等就行了。
打个比方:
这句话就是对称的。
如果对称的部分相等,那么就满足了回文的要求。


2.日期判断

**注意:判断是不是合法日期有个小坑,那就是闰年!
闰年的二月天数是29天,而不是28天。**

此时就涉及到了,闰年的判断方法。
对于日期的判断,我们可以记住下面这段代码。

小讯
上一篇 2024-12-25 18:12
下一篇 2024-12-23 15:41

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/997.html