#include <stdio.h>
#include <stdbool.h>
#define N 5
bool isMagicSquare(int matrix[N][N]);
void printMatrix(int matrix[N][N]);
int main() {
int magicSquare[N][N] = {
{17, 24, 1, 8, 15},
{23, 5, 7, 14, 16},
{4, 6, 13, 20, 22},
{10, 12, 19, 21, 3},
{11, 18, 25, 2, 9},
};
if (isMagicSquare(magicSquare)) {
printf("这是一个幻方矩阵。\n");
printMatrix(magicSquare);
} else {
printf("这不是一个幻方矩阵。\n");
}
return 0;
}
bool isMagicSquare(int matrix[N][N]) {
int sum = 0;
int i, j;
for (i = 0; i < N; i++) {
sum += matrix[0][i];
}
for (i = 1; i < N; i++) {
int rowSum = 0;
for (j = 0; j < N; j++) {
rowSum += matrix[i][j];
}
if (rowSum != sum) {
return false;
}
}
for (j = 1; j < N; j++) {
int colSum = 0;
for (i = 0; i < N; i++) {
colSum += matrix[i][j];
}
if (colSum != sum) {
return false;
}
}
int diagSum1 = 0;
for (i = 0; i < N; i++) {
diagSum1 += matrix[i][i];
}
int diagSum2 = 0;
for (i = 0; i < N; i++) {
diagSum2 += matrix[i][N - 1 - i];
}
return (diagSum1 == sum) && (diagSum2 == sum);
}
void printMatrix(int matrix[N][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}