1.题目
打印五阶幻方,即它的每一行、每一列和对角线上的各数之和均相等。
2.代码
#include<stdio.h>
int main(void)
{
int j, x = 1, y = 3, a[6][6] = { 0 };
for (int i = 1; i <= 25; i++)
{
a[x][y] = i; //将1-25所有数存到数组的相应位置。
if (x == 1 & y == 5)
{
x = x + 1; //当上一个数是第1行第五列时,下一个数放在它的下一行。
continue;
}
if (x == 1) //当上一个数是第1行时,则下一个数行数为5
{
x = 5;
}
else
x--; //否则行数减1
if (y == 5) //当上一个数列数是第5列时,则下一个数列数是1
{
y = 1;
}
else
y++;
if (a[x][y] != 0) //判断经过上面步骤确定的位置上是否有非零数
{
x = x + 2;
y = y - 1;
}
}
for (int i = 1; i <= 5; i++) //打印
{
for (int j = 1; j <= 5; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
3.个人见解
幻方中各数的排列规律,具体规律如下:
1.将1放在第一行中间一列。
2.从2开始直到25各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1.
3.如果上一个数的行数为1,则下一个数的行数为5,列数加1.
4.当上一个数的列数为5时,下一个数的列数应为1,行数减1.
5.如果按上面步骤确定的位置上已经有数(本实例不为0),或者上一个数是第1行第5列时,
则把下一个数放在上一个数的下面。