魔方阵的生成方法为第0行中间位置为1
2开始的其余n*n-1个数,依次按以下规则存放
1.下一个元素存放在当前元素的上一行、下一列
2.如果上一行下一列已有元素,则下一个元素存放的位置为当前列的下一行
3.在找上一行、下一行或下一列的时候,把矩阵看成回绕
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[100][100] = { 0 };
int row = 0, col = 0;
int i = 0;
int prerow = 0, precol = 0;
int n = 0;
while (1)
{
printf("输入这是一个几阶的魔方阵:");
scanf("%d", &n);
//奇魔方阵3~100之间
if (n % 2 == 0 && n < 3 && n>100)
{
break;
}
//1在第0行中间的位置
col = n/ 2;
a[row][col] = 1;
for (i = 2; i <= n * n; i++)
{
//下一个元素存放在当前元素的上一行,下一列
row--;
col++;
//矩阵看成绕环
if (row < 0)
{
row = n - 1;
}
if (col >= n)
{
col = 0;
}
//如果上一行、下一列已有元素,
// 则下一个元素存放的位置为当前
//列的下一行
if (a[row][col] != 0)
{
row = prerow + 1;
col = precol;
}
a[row][col] = i;
prerow = row;
precol = col;
}
for (i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}
return 0;
}
输出结果: