蓝桥杯[十一届][B组]-回文日期
2022-03-29 22:11 幻霞 阅读(39) 评论(0) 编辑 收藏 举报
一道经典而又稍微需要思考的题目,含有许多需要记住的东西
#include <cstdio> #include <cmath> #include <iostream> using namespace std; // 月表 int M[13]= {0,31,29,31,30,31,30,31,31,30,31,30,31}; // 获取回文数 int getN(int n) { int ans=0; while(n) { ans=ans*10+n%10; n/=10; } return ans; } // 判断闰年 bool isR(int n) { return n%400==0||(n%4==0&&n%100!=0); } // 根据年份返回一个合法的回文数 int makeS(int year) { int tmp=getN(year); // 判断月份合法性 if(tmp/100 <=0 || tmp/100 >12) { return -1; } // 判断日期合法性 if(tmp%100 <=0 || tmp%100 >M[tmp/100]) { return -1; } // 特殊处理闰年的2,29日 // 如果不是闰年但日期是2月29日那么不合法 if(tmp/100==2 && tmp%100 == 29 && !isR(year)) { return -1; } return year*10000+tmp; } int main() { int n; cin>>n; // 遍历年:从当前年开始,因为可能回文日期就在当年 int year; for(year=n/10000; year<=9999; year++) { int tmp=makeS(year); if(tmp!=-1) { // 避免当前日期之前的日期出现 if(tmp>n){ cout<<tmp<<endl; break; } } } for(year=n/10000; year<=9999; year++) { int tmp=-1; // 只有符合ABABBABA条件才会执行 if(year/1000 == (year/10)%10 && (year/100)%10 == year%10){ tmp=makeS(year); } if(tmp!=-1) { if(tmp>n){ cout<<tmp; break; } } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话