输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均
相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n2
#include<stdio.h> #include<stdlib.h> void array(int n){ int i,j,max,no; int *mtrx; if(n%2==0) //如果n是偶数,则加1变奇数 n+=1; max=n*n; mtrx=(int *)malloc(max); //为魔方阵分配内存 mtrx[n/2]=1; //将1存入数组 i=0; //1所在行 j=n/2; //1所在***定从1之后每下一个数的位置,由当前数确定下一个数 for(int num=2;num<=max;num++){ i=i-1; j=j+1; //下一个数在当前数的上一行,右一列 if((num-1)%n==0){ //当前数是n的整倍数 i+=2; j-=1; } if(i<0) //当前数在第0行时 i=n-1; if(j>n-1) //当前数在最后一列 j=0; no=i*n+j; //下一个数在数组中的最终位置 mtrx[no]=num; } //打印 printf("生成的%d魔方阵为:",n); no=0; for(i=0;i<n;i++){ printf("\n"); for(j=0;j<n;j++){ printf("%3d",mtrx[no]); no++; } } free(mtrx); } int main(){ int n; printf("请输入n值:"); scanf("%d",&n); array(n); return 0; }