n(n为奇数)阶幻方实现方法:
⑴ 将1放在第一行中间一列;
⑵ 从2开始直到n×n止各数依次按下列规则存放按45°方向行走,如向右上每一个数存放的行比前一个数的行数减1,列数加1
⑶ 如果行列范围超出矩阵范围,则回绕,例如1在第1行,则2应放在最下一行,列数同样加1; ⑷ 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时则把下一个数放在上一个数的下面。
代码如下:
#include"stdio.h"
#include"math.h"
int a[10][10]; //定义一个二维数组存放数据,大小根据测试的阶数确定
void ins(int n)
{
int x,y,m;
x=0;
y=n/2;
for(m=1;m<=n*n;m++) //依次将1~n*n赋值给二维数组
{
a[x][y]=m;// 将1放在第一行中间一列
if(m%n!=0)
{
x--; // 从2开始直到n×n止各数依次按下列规则存放:按45度方向行走
y++;
if(x<0) // 如果行列范围超出矩阵范围,则回绕
x=x+n;
if(y==n)
y=n-y;
}
else
{
x++;
if(x==n)
x=x-n;
}
}
}
main()
{
int i,j,n;
scanf("%d",&n);//输入阶数
ins(n); //调用函数
for(i=0;i<n;i++) //打印出幻方
{
for(j=0;j<n;j++)
printf("%4d",a[i][j]); //格式化输出
puts(""); //打印2个空行
puts("");
}
getch(); //win_TC下的语句用于停住画面,其他开发环境下无需
}
温馨提示:答案为网友推荐,仅供参考