点击查看代码
#include <stdio.h>
#define N 100
// 函数声明
void input(int x[][N], int n);
void output(int x[][N], int n);
// 待补足函数is_magic声明
// xxx
int is_magic(int x[][N], int n);
int main() {
int x[N][N];
int n;
while (printf("输入n: "), scanf_s("%d", &n) != EOF) {
printf("输入方阵:\n");
input(x, n);
printf("输出方阵:\n");
output(x, n);
if (is_magic(x, n))
printf("是魔方矩阵\n\n");
else
printf("不是魔方矩阵\n\n");
}
return 0;
}
// 函数定义
// 功能: 输入一个n*n的矩阵x
void input(int x[][N], int n) {
int i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j)
scanf_s("%d", &x[i][j]);
}
}
// 功能: 输出一个n*n的矩阵x
void output(int x[][N], int n) {
int i, j;
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j)
printf("%4d", x[i][j]);
printf("\n");
}
}
// 功能: 判断一个n阶方阵是否为魔方矩阵,如果是,返回1,否则,返回0
// 待补足函数is_magic定义
// xxx
int is_magic(int x[][N], int n)
{
if (n % 2 == 0)
return 0;
int sum = n * (n * n + 1) / 2;
for (int i = 0; i < n; i++) {
int hang_sum = 0;
for (int j = 0; j < n; j++)
hang_sum += x[i][j];
if (hang_sum != sum)
return 0;
}
for (int j = 0; j < n; j++) {
int lie_sum = 0;
for (int i = 0; i < n; i++)
lie_sum += x[i][j];
if (lie_sum != sum)
return 0;
}
int duijiao_sum = 0;
for (int i = 0; i < n; i++)
duijiao_sum += x[i][i];
if (duijiao_sum != sum)
return 0;
int fuduijiao_sum = 0;
for (int i = 0; i < n; i++)
fuduijiao_sum += x[i][n - 1 - i];
if (fuduijiao_sum != sum)
return 0;
return 1;
}
![image]()
![屏幕截图 2025-11-24 111147]()