“魔方阵”再回首
之前看到过三阶的魔方阵,然后可以递推奇数阶。本小编做了讲解,如果有兴趣,可以翻阅以前的内容。
今天再来看看4阶8阶,递推偶数阶。魔方阵看起来难,无从下手其实经过认真分析,找到规律,也就轻松解决。
4阶:
简单说就是一个左上由1依序开始填,但遇上对角线不填。另一个是从左上由16开始填,是遇上对角线填。两者结合起来就是4阶魔方阵
分析如下:
4阶
//方法一:
void MagicSquare()
{
#define ROW 4
#define COL 4
int arr[ROW][COL];
int tmp1 = ROW*COL;
int tmp2 = 0;
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
if(i == j || (i+j == 3))//找规律
{
arr[i][j] = tmp1;
}
else
{
arr[i][j] = tmp2;
}
tmp1--;
tmp2++;
}
}
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
printf("%-4d",arr[i][j]);
}
printf("\n");
}
}
输出:
8阶:8阶就是4个4阶组成
*分析如下:
void MagicSquare()
{
#define ROW 8
#define COL 8
int arr[ROW][COL];
int tmp1 = ROW*COL;
int tmp2 = 0;
int i = 0;
int j = 0;
for(i = 0;i < ROW;i++)
{
for(j = 0;j < COL;j++)
{
if((i+j)%4 == 3 || i%4 == j%4)对角线
{
arr[i][j] = tmp1;
}
else
{
arr[i][j] = tmp2;//不是对角线
}
tmp1--;
tmp2++;
}
}
for(i= 0;i < ROW;i++)
{
for(j = 0;j < COL;j++)
{
printf("%-4d",arr[i][j]);
}
printf("\n");
}
}
int main()
{
MagicSquare();
return 0;
}
输出: