[洛谷] P2010 [NOIP2016 普及组] 回文日期

image
image


点击查看代码
#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 之间的回文日期数。

posted @ 2022-04-12 13:10  wKingYu  阅读(185)  评论(0编辑  收藏  举报