P2010 [NOIP2016 普及組] 迴文日期
阿新 • • 發佈:2022-04-12
話不多說,先上程式碼
點選檢視程式碼
#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之間的迴文日期數。