输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均
相等。例如,三阶魔方阵为
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;
}