[洛谷] P2010 [NOIP2016 普及组] 回文日期
阅读原文时间:2023年07月10日阅读:1


点击查看代码

#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 之间的回文日期数。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章