首页 > 其他分享 >回文日期

回文日期

时间:2023-04-06 16:26:18浏览次数:40  
标签:10 return int 日期 rear 回文

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

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

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

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

 

代码及思路如下:

  1 import java.time.LocalDate;
  2 import java.time.format.DateTimeFormatter;
  3 import java.util.*;
  4 
  5 public class test {
  6 
  7     /*实现三个要求
  8      * 1——判断是否为闰年(四年一闰百年不闰,每四百年再一闰)
  9      * 2——判断是否为回文数
 10      * 3——判断是否为ABAB
 11      * */
 12     
 13     //1闰年输出true ,非闰年输出false
 14     static boolean isRun(int n) {
 15         if (n%4== 0&& n%100!=0 || n%400==0) {
 16             return true;}
 17         else {
 18             return false;
 19         }
 20     }
 21     
 22     //2判断是否回文
 23     static boolean isCirchar(int y) {
 24         int d1 = y%10;
 25         int d2 = y/10%10;
 26         int d3 = y/100%10;
 27         int d4 = y/1000%10;
 28         int rear =d1*1000 + d2*100 + d3*10 + d4;
 29         int pre = y/10000;
 30         if (pre == rear) {
 31             return true;
 32         }else {
 33             return false;
 34         }        
 35         
 36     }
 37     
 38     //3判断是否为ABAB
 39     static boolean isRechar(int y) {
 40         int pre = y/1000000;
 41         int rear = y/10000%100;
 42         if (pre == rear) {
 43             return true;
 44         }else {
 45             return false;
 46         }
 47     }
 48     
 49     //4取月
 50     static int take_month(int y) {
 51         int rear = y/100%10;
 52         int pre = y/1000%10;
 53         return pre*10+rear;
 54     }
 55     
 56     //5取日
 57         static int take_day(int y) {
 58             int rear = y%10;
 59             int pre = y/10%10;
 60             return pre*10+rear;
 61         }
 62     
 63     
 64     /*优化思路:
 65      * 判断每月天数
 66      * 按月
 67      *             31天:一三五七八十腊
 68      *             30天:四六九十一
 69      * 二月按年
 70      *             28天:闰年二月
 71      *             29天:平年二月
 72      * */
 73     
 74     public static void main(String[] args) {
 75         Scanner scanner = new Scanner(System.in);
 76         int y = scanner.nextInt(); 
 77         //判断是否是回文日期
 78         for (int i = y+1; i < 99991231; i++) {
 79             if (take_month(i)<=12 && take_day(i)<=31 && take_month(i)!=0 && take_day(i)!=0 && isCirchar(i)==true) {
 80                     //小月
 81                     if (take_month(i)==4 || take_month(i)==6 || take_month(i)==9 || take_month(i)==11) {
 82                         if (i%100<=30) {
 83                             System.out.println(i);
 84                             break;
 85                         }
 86                     }else if (take_month(i) != 2) {//大月
 87                         if (i%100<=31) {
 88                             System.out.println(i);
 89                             break;
 90                         }
 91                     }else {
 92                         if (isRun(i)==true) {
 93                             if (i%100<=29) {
 94                                 System.out.println(i);
 95                                 break;
 96                             }
 97                         }else {
 98                             if (i%100<=28) {
 99                                 System.out.println(i);
100                                 break;
101                             }
102                         }
103                     }
104                     
105                     
106                 }
107         }
108         
109         //判断是否是回文日期且为ABAB型
110         for (int l = y+1; l < 99991231; l++) {
111             if (take_month(l)<=12 && take_day(l)<=31 && take_month(l)!=0 && take_day(l)!=0 && isCirchar(l)==true && isRechar(l)==true) {
112                 //小月
113                 if (take_month(l)==4 || take_month(l)==6 || take_month(l)==9 || take_month(l)==11) {
114                     if (l%100<=30) {
115                         System.out.println(l);
116                         break;
117                     }
118                 }else if (take_month(l) != 2) {//大月
119                     if (l%100<=31) {
120                         System.out.println(l);
121                         break;
122                     }
123                 }else {
124                     if (isRun(l)==true) {
125                         if (l%100<=29) {
126                             System.out.println(l);
127                             break;
128                         }
129                     }else {
130                         if (l%100<=28) {
131                             System.out.println(l);
132                             break;
133                         }
134                     }
135                 }
136                 
137             }        
138         }
139              
140     }
141 }
142 
143 
144 //LocalDate date = LocalDate.parse(dateStr, DateTimeFormatter.ofPattern("yyyyMMdd"))

 

标签:10,return,int,日期,rear,回文
From: https://www.cnblogs.com/Fangithub/p/17293125.html

相关文章

  • STATA 日期型数据显示格式调整
    useceshi1,clear.list//+--------------------+//|A3_1A3_2A3_3|//|--------------------|//1.|196752|//2.|1945822|//3.|1949314|//4.|1986616|//5.|195......
  • 日期
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......
  • 回文自动机
    概念回文自动机,PAM,又叫回文树。用于处理和回文子串有关的问题,和SAM有一些类似的地方。构造首先PAM上的每个结点代表原串的一个回文子串。根据神秘结论,原串本质不同的回文子串至多有\(n\)个,也就是PAM的点数至多是\(n+2\),边数至多是\(n\).考虑到回文串的奇偶性会......
  • 合法日期
    合法日期题目描述小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。没想到,日记很快就被老师发现了问题,原来小蓝记完8月31日的日记,竟又记了8月32日和8月33日的日记。这显然是......
  • java中如何灵活的比较日期大小
    java中如何灵活的比较日期时间大小 在比较两个日期时间的大小之前,我们先了解两个需要用到的类:Date和Calendar 1. Date类 java.util包提供了Date类来封装当前的日期和时间1publicstaticvoidmain(String[]args){2DatedNow=newDate();3......
  • 39. 组合总和 40.组合总和II 131.分割回文串
    39.组合总和自己写的回溯算法:classSolution{List<List<Integer>>list;LinkedList<Integer>res;publicList<List<Integer>>combinationSum(int[]candidates,inttarget){list=newArrayList<>();res=......
  • mysql 时间转换成日期
    很多时候都存了当前时间,没有单独存日期这个函数。查询按天查询的时候,需要转换成日期。selectDATE_FORMAT(create_time,"%Y-%m-%d")asday,count(DISTINCT(product_user_id))asuv,count(product_user_id)aspvfromdts_pay_orderwhereclient_id=32andcreate_ti......
  • 河北稳控科技便携式钻孔测斜仪日期时间与输入法设置
    河北稳控科技便携式钻孔测斜仪日期时间与输入法设置 日期时间设置由于仪器保存的数据带有日期时间信息,正确的日期时间信息有利于数据管理、区分不同时间点的测量数据,所以需要保证系统时间的正确性。若需要重新设置时间,有两种途径打开设置窗口。(1)在测斜仪程序主界面,点击右上......
  • Django笔记十五之in查询及date日期相关过滤操作
    这一篇介绍关于范围,日期的筛选inrangedateyearweekweekdayquarterhour1、inin对应于MySQL中的in操作,可以接受数组、元组等类型数据作为参数:Blog.objects.filter(id__in=[1,2,3])对应的SQL是:select*fromblog_blogwhereidin(1,2,3);字符串也可以作......
  • Python使用Matplotlib画以日期为X轴的图
    Python使用Matplotlib画以日期为X轴的图步骤:用pd把字符串格式的日期转成date格式.使用 AutoDateLocator 设置x轴的属性.1frommatplotlibimportpyplotasplt2importpandasaspd3frommatplotlib.datesimport(4MonthLocator,5AutoDateLoc......