奇魔方阵的生成方法为:
一、在第0行中间放置1。
二、对从2开始的其余-1个元素依次按下列规则存放:
1.下一个元素存放在当前元素的上一行、下一列。
2.如果上一行下一列已经有元素,则下一个元素的存放位置为当前列的下一行。
3.在找上一行、下一行或者下一列的时候,必须把这个矩阵看成是回绕的。
int main()
{
int row,col,n,prerow,precol;
int arr[100][100]={0};
printf("请输入奇魔方阵的阶数:>") ;
scanf("%d",&n);
printf("\n");
row=0;
col=n/2;
arr[row][col]=1;
for(int i=2;i<=n*n;i++)
{
row--;
col++;
if(row<0)
{
row=n-1;
}
if(col>=n)
{
col=0;
}
while(1)
{
if(arr[row][col]!=0)
{
row=prerow+1;
col=precol;
}
if(row>=n)
{
row=0;
}
if(col<0)
{
col=n-1;
}
if(arr[row][col]==0)
{
arr[row][col]=i;
break;
}
}
prerow=row;
precol=col;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%2d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
请输入奇魔方阵的阶数:>5
17 24 ?1 ?8 15 23 ?5 ?7 14 16 ?4 ?6 13 20 22 10 12 19 21 ?3 11 18 25 ?2 ?9
-------------------------------- Process exited after 1.448 seconds with return value 0
|