P8716 [蓝桥杯 2020 省 AB2] 回文日期

打印 上一主题 下一主题

主题 821|帖子 821|积分 2463

1 题目阐明


2 题目分析

暴力不会超时,O(n)的时间复杂度,                                   <                         1                                   0                            8                                       <10^8                  <108。分析见代码:
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. int m[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  5. // 判断日期是否有效
  6. bool valid(int date){
  7.         int year=date/10000;
  8.         int month=date%10000/100;
  9.         int day=date%100;
  10.         // 判断闰年
  11.         if(year%400==0||year%4==0&&year%100!=0) m[2]=29;
  12.         else m[2]=28;
  13.     // 判断month和day是否在范围内
  14.         if(month<=12&&month>0&&day<=m[month]&&day>0) return true;
  15.         return false;
  16. }
  17. // 判断是否是回文日期
  18. bool isPalindrome(string d){
  19.         for(int i=0;i<8;i++)
  20.         if(d[i]!=d[7-i]) return false;
  21.         return true;
  22. }
  23. // 判断是否为ABABBABA型日期
  24. bool isABABBABA(string d){
  25.         // 判断回文在判断ABABBABA之前,只需要证明该回文日期的前半部分符合ABAB就行。
  26.         if(d[0]==d[2]&&d[1]==d[3]) return true;
  27.         return false;
  28. }
  29. int main(){
  30.         int n;
  31.         cin>>n;
  32.         int flag=0;
  33.         for(int i=n+1;;i++)
  34.                 if(valid(i)&&isPalindrome(to_string(i))){
  35.                         if(!flag){
  36.                                 cout<<i<<endl;
  37.                                 flag=1;
  38.                         }
  39.                         if(isABABBABA(to_string(i))){
  40.                                 cout<<i;
  41.                                 break;
  42.                         }
  43.                 }
  44. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表