奇幻方主流有四种求法.我用了一种.还有个阶梯法比较搞人.第二个printf没法用...
算法.第一行中间是1
每次向右上移动.
到了边界则换到另外一个边界.
如果下一个数有了.就下一一个
如果到了右上角就下一一个.
我这个是5阶幻方.
# include"stdio.h"
void main()
{
int a[7][7]={0};
int i=1,j=3,k=1;
int x,y;
while (k<26)
{
a[j]=k;
i--;
j++;
k++;
if(0!=a[j])
{i+=2;j-=1;continue;}
if(i==0&&j==6)
{i=2;j=5;continue;}
if (i==0){i=5;}//5
if(j==6){j=1;}
}
for (x=1;x<6;x++)
{
for(y=1;y<6;y++)
{printf("%d/t",a[x][y]);}
printf("/n");
}
}
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
这个是图.
下面的是阶梯法的结果.手算的
3
16 9 22
15
20 8
21
14 2
7 25
13 1
19
24
12 5
18 6
11 4
17 0
23 .
这个是阶梯法的草稿
0 0
0 0
5 0
0 0 0零
0 0
0 4
0
10 0
0 0一
0 0
3 0
9 0
15 0 0二
0 2
0 8
0
14 0
20 0三
1 0
7 0
13 0
19 0
25四
0 6
0
12 0
18 0
24 0五
0 0
11 0
17 0
23 0 0六
0 0
0
16 0
22 0
0 0七
0 0
0 0
21 0
0 0 0八
|