幻方,或称纵横图,由一组排放在正方形中的整数组成,其每行、每列以及两条对角线上的数之和均相等。通常幻方由从 1 到 N2 的连续整数组成,其中N为正方形的行或列的数目。因此 N 阶幻方有 N 行 N 列,并且所填充的数为从 1 到 N2。
构造法
详见维基百科
代码
这里贴一个大一时写的代码,用混乱 C 语言写的:
#include <stdio.h>
int _[100][100],__[50][50],___,____,_____,______,_______,________;char *_________;int main(int __________){return(__________==1&&(___==0&&(printf("Enter n(n>0): "),scanf("%d",&___)),((___&1)&&(___&1)&&(_____=1,______=(___+1)/2,_[0][______-1]=1,_______=2)),(!(___&3)&&(_______=1)),(((___&3)==2)&&(____=___/2,_____=2,______=(____+1)/2-1,_______=1)),main(0))),(__________==0&&((((___&1)&&(_______<=___*___))||(!(___&3)&&(_______<=___*___))||(((___&3)==2)&&(_______<=____*____))||(!((___==2)&&printf("No solution.\n"))&&________<=___*___))&&(((_______<=___*___)&&((((___&1)&&((((_____==1&&______==___)||_[(___+_____-2)%___][______%___])?(_____=_____%___+1):(_____=(___+_____-2)%___+1,______=______%___+1)),_[_____-1][______-1]=_______))),((!(___&3)&&(_[(_______-1)/___][(_______-1)%___]=((_______%4<2)^((_______+___-1)/___%4<2))?(___*___+1-_______):_______))),(((___&3)==2)&&((((_____==1&&______==____)||__[(____+_____-2)%____][______%____])?(_____=_____%____+1):(_____=(____+_____-2)%____+1,______=______%____+1)),__[_____-1][______-1]=_______,_________=((_____>=___/4+3)?"\3\0\1\2":(((______==___/4+1)?(_____==___/4+1):(_____==___/4+2))?"\3\0\2\1":"\0\3\2\1")),_[_____*2-2][______*2-2]=_______*4-_________[0],_[_____*2-2][______*2-1]=_______*4-_________[1],_[_____*2-1][______*2-2]=_______*4-_________[2],_[_____*2-1][______*2-1]=_______*4-_________[3]))),((_______>___*___)&&printf(________%___?"%4d":"%4d\n\n",_[(________-1)/___][(________-1)%___]))),((___&1)&&(_______++)),(!(___&3)&&(_______++)),(((___&3)==2)&&(_______++),((_______>___*___)&&(________++))),main(0))));}
看不懂?嗯,我也看不懂当时是怎么写的了 >_< 。不过确实是能跑的,测试如下:
Enter n(n>0): 3
8 1 6
3 5 7
4 9 2
Enter n(n>0): 4
1 15 14 4
12 6 7 9
8 10 11 5
13 3 2 16
Enter n(n>0): 5
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
Enter n(n>0): 6
32 29 136 133 24 21
30 31 134 135 22 23
12 9 137 140 28 25
10 11 138 139 26 27
13 16 144 141 5 8
14 15 142 143 6 7