• 蓝桥杯-回文日期


    题目描述
    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,保证 N 是一个合法日期的 8 位数表示。

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

    思路
    本题的基本思路是,取出8位数的前四位first4,依次递加,求出first4的回文数的后四位,组成一个新的8位数,判断是不是合法的日期。找出回文数之后,进一步判断是不是ABABBABA。如果不是ABABBABA,先取出前两位数first2,即得到了AB,依次递加构造ABABBABA回文数,判断是否是合法的日期。
    这个思路需要重点解决的是,从初始日期中取出前4位后,需不需要先执行first4+=1。
    例如:20200101,first4不能先+1,第一个回文日期是20200202.
    20200203,first4需要先+1,因为first4对应的回文日期是20200202,比原始日期要小。
    判断规则是:
    如果first4的回文数小于last4,那么组成的新日期要比原始日期小,所以first4+=1;
    如果first4的回文数等于last4,说明原始日期是回文日期,要从后面开始找,所以first4+=1;
    求ABABBABA时,如果first2

    题解

    #include 
    using namespace std;
    bool isRight(int date){
      int y=date/10000;
      int m=date%10000/100;
      int d=date%100;
      if(m<1||m>12){
        return false;
      }else{
        switch(m){
          case 1:if(d>31)return false;break; 
          case 2:
          if(y%400!=0&&y%4==0||y%400==0){
            if(d>29)return false;
          }else{
            if(d>28)return false;
          }
          break; 
          case 3:if(d>31)return false;break; 
          case 4:if(d>30)return false;break; 
          case 5:if(d>31)return false;break; 
          case 6:if(d>30)return false;break; 
          case 7:if(d>31)return false;break; 
          case 8:if(d>31)return false;break; 
          case 9:if(d>30)return false;break; 
          case 10:if(d>31)return false;break; 
          case 11:if(d>30)return false;break; 
          case 12:if(d>31)return false;break; 
        }
      }
      return true;
    }
    int getpalindromic(int n){
      int res=0;
      while(n!=0){
        res*=10;
        res+=n%10;
        n/=10;
      }
      return res;
    }
    int main()
    {
      // 请在此输入您的代码
      int date;
      int a,b;
      cin>>date;
      int first4=date/10000;
      int last4=date%10000;
      if(getpalindromic(first4)<last4){
        first4+=1;
      }else if(first4*10000+getpalindromic(first4)==date){
        first4+=1;
      }
      while(1){
        int tmp=first4*10000+getpalindromic(first4);
        if(isRight(tmp)){
          a=tmp;
          break;
        }
        first4+=1;
      }
      int first2=first4/100;
      int last2=first4%100;
      if(first2==last2){
        b=a;   
      }else{
        if(first2<last2){
          first2+=1;
        }
        while(1){
          last2=first2;
          first4=first2*100+last2;
          int tmp=first4*10000+getpalindromic(first4);
          if(isRight(tmp)){
            b=tmp;
            break;
          }
          first2+=1;
        }
      }
      
      cout<<a<<endl;
      cout<<b;
    
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
  • 相关阅读:
    ttkefu子账号提示已被关闭或过期是什么一样,该怎么处理呢?
    民生银行信用卡中心金融科技24届春招面经
    java计算机毕业设计基于安卓Android的助农商城APP-农业信息app
    【C++笔试强训】第二十八天
    数字孪生与GIS:优化公共交通的未来
    Spring中Bean注入的几种方式
    python面向对象的三大特性:封装,继承,多态
    敦煌考古,招不到人了?看数字化技术如何破圈
    图像处理之同态滤波实现灰度图像增强
    ubuntu18.04安装gtsam
  • 原文地址:https://blog.csdn.net/weixin_45760415/article/details/127722764