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

C語言解決車牌號謎題:AABB 形式完全平方數

     編輯:C 語言問答

題目重述

四位數車牌 AABB(千位=百位=A,十位=個位=B,A≠B),且為某整數平方。求該車牌號。

數學建模

AABB = 1000A + 100A + 10B + B = 1100A + 11B = 11(100A + B)
因為是完全平方數,且含因子 11,所以必含 11²=121。
設 AABB = (11k)² = 121k²,則 100A + B = 11k²。
又 1000 ≤ AABB ≤ 9999 → 32 ≤ 11k ≤ 99 → 3 ≤ k ≤ 9。

窮舉法代碼(最直觀)

#include 
#include 

int main() {
    for (int a = 1; a <= 9; a++) {        // 千位不能為 0
        for (int b = 0; b <= 9; b++) {
            if (a == b) continue;         // A ≠ B
            int plate = 1100 * a + 11 * b; // AABB
            int root = (int)sqrt(plate);
            if (root * root == plate) {
                printf("車牌號: %d%d%d%d = %d²\n", a, a, b, b, root);
            }
        }
    }
    return 0;
}

優化版:直接枚舉平方根

int main() {
    for (int k = 32; k <= 99; k++) {      // 四位數平方根範圍
        int sq = k * k;
        int a = sq / 1000;                // 千位
        int b = (sq / 100) % 10;          // 百位
        int c = (sq / 10) % 10;           // 十位
        int d = sq % 10;                  // 個位
        if (a == b && c == d && a != c) { // AABB 且 A≠B
            printf("車牌號: %d = %d²\n", sq, k);
        }
    }
    return 0;
}

運行結果

車牌號: 7744 = 88²

驗證:88² = 7744,符合 A=7, B=4, A≠B。
數學驗譐:7744 = 11 × 704 = 11 × 11 × 64 = 121 × 64 = (11×8)² = 88²。

擴展思考

  • 若放寬到「任意四位數完全平方數」,共有 68 個(32²~99²)。
  • 若形式為 ABAB 或 ABBA,同理可解。
  • 大數字版:八位數 AABBCCDD 完全平方數,需用 long long + 剪枝/數論優化。

總結

本題展示了 **數學建模(因式分解縮小搜索空間)+ 程序實現(雙重迴圈/單重迴圈枚舉)**。
關鍵技巧:利用完全平方數的質因數次數均為偶數,快速鎖定 11² 因子,將搜索範圍從 90×10=900 縮減到 7 次平方根檢查。
這是「數學思維服務於編程效率」的經典案例。

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