魔方阵
概念
对于一个n阶矩阵,每一行,每一列和对角线元素之和均相等
代码
#include<stdio.h>
int main(){
int n;
printf("请输入魔方阵的阶数:");
scanf("%d",&n);
if(n<1||n%2!=1){
printf("请输入奇数\n");
return 0;
}
int a[100][100],x,y,p,q;
x=0;
y=n/2;
p=x;
q=y;
a[x][y]=1;//1放在第一行中间
for(int i=2;i<=n*n;i++){
if(p==0) x=n-1;//如果上一个数在第一行,那么下一个数在第n行
else x=p-1;//下一个数比上一个数行数减1
if(q==n-1) y=0;//如果上一个数在第n列,那么下一个数在第一列
else y=q+1;//下一个数比上一个数列数加1
if((p==0 && q==n-1)||(a[x][y]>0 && a[x][y]<=n*n))
//如果下一个数的位置有数或者上一个数为第1行第n列,那么放在上一个数的下面
{
a[p+1][q]=i;p++; continue;
}
a[x][y]=i;
p=x;q=y;
}
printf("魔方阵:\n");
for(i=0;i<n;i++){
for(int j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n\n");
}
return 0;
}