点击查看代码
#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

posted @ 2025-11-24 11:15  嗯亨  阅读(5)  评论(1)    收藏  举报