[洛谷] P2010 [NOIP2016 普及组] 回文日期
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int data1, data2, ans = 0, sum;
int d[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
cin >> data1 >> data2;
for (int i = 1; i <= 12; i++) {
for (int j = 1; j <= d[i]; j++) {
int c = (j % 10) * 1000 + (j / 10) * 100 + (i % 10) * 10 +
(i / 10);
sum = c * 10000 + i * 100 + j;
if (sum >= data1 && sum <= data2) ans ++;
}
}
cout << ans;
return 0;
}
这道题需要找出所有处在 date1 和 date2 之间的回文日期,一个比较巧妙的思路是,由于日期都是 8 位的,我们可以从末尾的月和日这 4 位入手,因为回文日期需要满足前 4 位和后 4 位完全相同,所有我们可以枚举出月和日的所有可能组合,然后计算出对应的回文日期的年份,并按照“ 年 + 月 + 日 ”的形式存到一个 sum 变量中,如果 sum 变量位于 date1 和 date2 之间,就把结果变量 ans ++ ,这样,把月和日遍历完之后, ans 就等于处在 date1 和 date2 之间的回文日期数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)