将1到n^2的自然数摆成n行n列的方阵要求每一行每一列二条对角线上的数加起来都相等这样的方阵称n阶魔方阵

2025-06-21 21:24:24
推荐回答(1个)
回答1:

#include "stdio.h"

#include

int main(int argv,char *argc[]){

int n,i,j,k,*p,**q;

printf("Input n(int 019 || !(n&1)){

printf("Input error, exit...\n");

return 0;

}

p=(int *)malloc(sizeof(int)*n*n);

if(!p || !(q=(int **)malloc(sizeof(int *)*n))){

printf("Application failure, exit...\n");

return 0;

}

for(q[0]=p,i=1;i

for(i=0;i

for(j=0;j

for(k=1,i=n/2,j=n-1;k<=n*n;k++,i++,j++){

if(j==n && i

j-=n;

else if(i==n && j

i-=n;

else if(j==n && i==n || q[i][j]){

j-=2;

i-=1;

}

q[i][j]=k;

}

printf("\nThe results are as follows:\n");

for(i=0;i

for(j=0;j

printf("\n");

}

free(p);

free(q);

return 0; 

}

运行样例: