#include <stdio.h>
#include <stdlib.h>
#define N 4 //测试所用
void fun()
{
int a[9][9],r,c,num,n; //最大9*9的矩阵 可以修改规模
n=N;
for(r=0;r<n;r++)
for(c=0;c<n;c++)
a[r][c]=0;
r=0;c=n/2;num=1;
a[r][c]=num; //定位第一个元素
while(num<n*n)
{
num++;
if(r==0&&c==n-1)r++;
else
{ r--;c++;
if(r<0)r=n-1; //不断定位
if(c==n)c=0;
if(a[r][c]!=0){r+=2;c--;}
}
a[r][c]=num; //根据定位 逐渐从1填到n*n
}
for(r=0;r<n;r++) //打印 n数据大时 需要调节%4d等格式化输出
{for(c=0;c<n;c++)
printf("%3d",a[r][c]);
printf("\n");
}
}
void main()
{
fun();
}
注意到magic(4)在matlab里只有一种打印方式 是有内部函数实现的,而4阶幻方是有不同的写法
这里难点在于循环定位,而基本性质1 求和项值为n(n*n+1)/2 而奇数阶中间值为(n*n+1)/2
转载于:https://blog.51cto.com/sts609/1749368