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

判斷方陣是否為魔方陣:C 語言二維數組行列對角線求和驗證

     編輯:程式設計綜合問答

問題

輸入 n 階方陣,判斷每行、每列、主對角線、副對角線之和是否相等(魔方陣)。

算法邏輯

  1. 讀入 n 及矩陣元素。
  2. 以第一行之和為基準 sum。
  3. 依次驗證:每行和、每列和、主對角線和、副對角線和均等於 sum。
  4. 任一不等即返回 false,全等返回 true。

參考實現

bool isMagicSquare(int n) {
    int a[100][100];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &a[i][j]);

    int sum = 0;
    for (int j = 0; j < n; j++) sum += a[0][j];  // 基準和

    // 行
    for (int i = 0; i < n; i++) {
        int rowSum = 0;
        for (int j = 0; j < n; j++) rowSum += a[i][j];
        if (rowSum != sum) return false;
    }
    // 列
    for (int j = 0; j < n; j++) {
        int colSum = 0;
        for (int i = 0; i < n; i++) colSum += a[i][j];
        if (colSum != sum) return false;
    }
    // 主對角線
    int diag1 = 0;
    for (int i = 0; i < n; i++) diag1 += a[i][i];
    if (diag1 != sum) return false;
    // 副對角線
    int diag2 = 0;
    for (int i = 0; i < n; i++) diag2 += a[i][n - 1 - i];
    if (diag2 != sum) return false;

    return true;
}

注意事項

  • 原代碼中 scanf("%d", a[i][j]) 缺少 &,已修正。
  • 副對角線下標為 [i][n-1-i],原代碼 [i][n-i] 越界。
  • 數組大小 100 足夠應對常規測試用例。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved