奇幻方的摇摆法
![]() ![]()
奇幻方主流有四种求法.我用了一种.还有个阶梯法比较搞人.第二个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八 |