1. 程式人生 > 其它 >P2010 [NOIP2016 普及組] 迴文日期

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之間的迴文日期數。