首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言找回文日:從2011-11-02出發,未來80年還有哪些「對稱之美」?

     編輯:關於C

什麼是回文日?

回文日是指日期正讀反讀都一樣的日子,例如 2011年11月02日寫作 20111102,正反對稱。本題要求列出從 2011 年起未來 80 年(至 2091 年)所有的回文日。

演算法設計重點

  • 日期合法性檢查:需正確處理大小月、閏年二月(29天)。
  • 數字拆解與比對:將年份拆為 4 位數陣列 year[4],月日拆為 4 位數陣列 monthday[4],再兩兩對比(year[0] vs monthday[3]、year[1] vs monthday[2]…)。
  • 閏年判斷函式:CheckYear() 依「四年一閏、百年不閏、四百年再閏」規則實作。

核心程式碼結構

const int Day[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

int CheckYear(int y) {
    return (y%100!=0 && y%4==0) || (y%400==0);
}

int CompareNum(int y[], int md[]) {
    for (int i=0, j=3; i<4; i++, j--)
        if (y[i] != md[j]) return 0;
    return 1;
}

int main() {
    for (int year=2011; year<=2091; year++) {
        // 拆解年份四位數存入 year[4]
        // 雙層迴圈遍歷 1~12 月、每月 1~Day[month] 日
        // 拆解月日存入 monthday[4]
        // 閏年二月特別處理
        // CompareNum() 判斷是否回文,是則輸出
    }
    return 0;
}

執行結果節錄

程式會輸出類似:

第1個  2011    11    2 是回文日.
第2個  2020    02    2 是回文日.
第3個  2030    03    2 是回文日.
...
第36個  2091    19    2 是回文日.

共找到 36 個回文日(含起始日)。完整列表請見執行截圖。

學習價值

此題綜合練習了:陣列操作、巢狀迴圈、函式模組化、日期邏輯處理、字元/數字轉換——是 C 語言進階練習的優質素材。

回文日程式執行結果截圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved