奇幻方主流有四種求法.我用了一種.還有個階梯法比較搞人.第二個printf沒法用...
算法.第一行中間是1
每次向右上移動.
到了邊界則換到另外一個邊界.
如果下一個數(shù)有了.就下一一個
如果到了右上角就下一一個.
我這個是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
這個是圖.
下面的是階梯法的結(jié)果.手算的
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八
|