2501_93568880 2025-12-12 21:23:30
580 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

#include<stdio.h>
int main()
{
    int magc[][5] = { 
        {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}
    };
    int i, j,sum=0;
    int L_sum = 0, C_sum[5] = { 0 }, diag1 = 0, diag2 = 0;
    for (i = 0; i < 5; i++)/*遍历数组,取各行、列、对角和*/
    {
        for (j=0; j < 5; j++)
        {
            L_sum += magc[i][j];
            C_sum[j] += magc[i][j];
            if (i==j) diag1 += magc[i][j];/*计算主副对角和*/
            if (i==(4-j)) diag2+=magc[i][j];/*计算副对角和*/
        }
        if (i)/*从第二行开始比较每行的和*/
        {
            if (sum == L_sum)
            {
                L_sum = 0;/*行和清零*/
                continue;
            }
            else
                printf("该数组不是幻方矩阵!\n");
                return 0;/*如果行之和比较不同,立即终止程序。*/
        }
        sum += L_sum;
        L_sum = 0;
    }
    if ((sum != diag1) || (sum != diag2) || (diag1 != diag2))/*比较行和与对角和*/
    {
        printf("该数组不是幻方矩阵!\n");
        return 0;
    }
    for (i = 0; i < 5; i++)/*比较行和与列和*/
    {
        if (sum != C_sum[i])
            printf("该数组不是幻方矩阵!\n");
    }
    printf("该数组是幻方矩阵!\n");
    return 0;
赵4老师 2025-12-18
  • 打赏
  • 举报
回复

仅供参考:


#include <stdio.h>
#define N 5  // 定义矩阵的维度为5

int main(void) {
    int i, j;
    int x[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}
    };  // 初始化二维数组
    int rowSum[N], colSum[N], diagSum1, diagSum2;
    int flag = 1;

    // 计算每行的和
    for (i = 0; i < N; i++) {
        rowSum[i] = 0;
        for (j = 0; j < N; j++) {
            rowSum[i] = rowSum[i] + x[i][j];
        }
    }

    // 计算每列的和
    for (j = 0; j < N; j++) {
        colSum[j] = 0;
        for (i = 0; i < N; i++) {
            colSum[j] = colSum[j] + x[i][j];
        }
    }

    // 计算主对角线的和
    diagSum1 = 0;
    for (j = 0; j < N; j++) {
        diagSum1 = diagSum1 + x[j][j];
    }

    // 计算反对角线的和
    diagSum2 = 0;
    for (j = 0; j < N; j++) {
        diagSum2 = diagSum2 + x[j][N - 1 - j];
    }

    // 判断是否为幻方
    if (diagSum1 != diagSum2) {
        flag = 0;
    } else {
        for (i = 0; i < N; i++) {
            if ((rowSum[i] != diagSum1) || (colSum[i] != diagSum1)) {
                flag = 0;
            }
        }
    }

    // 输出结果
    if (flag) {
        printf("It is a magic square!\n");
        for (i = 0; i < N; i++) {
            for (j = 0; j < N; j++) {
                printf("%4d", x[i][j]);
            }
            printf("\n");
        }
    } else {
        printf("It is not a magic square!\n");
    }

    return 0;
}

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧