要求:打印五阶幻方,即它的每一行、每一列和各对角线上的各数之和均相等
关键思路:
1.将 1 放在第一行中间一列
2.从 2 到 25 各数依次按以下规则存放:每一个数存放的行比前一个数的行数减 1 ,列数加 1
a[x][y] =i;
if(x==1&&y==5)
{
x=x+1;
continue;
}
3.如果上一个数的列数为 5,下一个数的列数为 1,行数减 1
4.上一个数行数为 1,则下一个数行数为 5 ,列数加 1
if(x==1)
x=5;
else
x--;
if(y==5)
y=1;
else
y++;
5.若按照上述步骤确定的位置上已经有数(即不为0),或者上一个数是第 1 行第 5 列则把下一个数放在上一个数的下面
if(a[x][y]!=0)
{
x=x+2;
y=y-1;
}
运行结果如下
整体参考代码如下:
#include <string.h>
#include <stdio.h>
int main()
{
int i,j,x=1,y=3,a[6][6]={0};
for(i=1;i<=25;i++)
{
a[x][y] =i;
if(x==1&&y==5)
{
x=x+1;
continue;
}
if(x==1)
x=5;
else
x--;
if(y==5)
y=1;
else
y++;
if(a[x][y]!=0)
{
x=x+2;
y=y-1;
}
}
for(i=1;i<=5;i++)
{
for(j=1;j<=5;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}