/*幻方的計算:
計算任意階數幻方的各行、各列、各條對角線上所有數的和的公式為:sum=n*(n^2+1)/2 n為階數
幻方分為奇階幻方和偶階幻方
一、當n為奇數時稱為奇階幻方
1、merzirac法生成奇階幻方
在第一行居中的方格內放1,依次向右上方填入2、3、4…,如果右上方已有數字,則向下移一格繼續填寫。
2、loubere法生成奇階幻方
在居中的方格向上一格內放1,依次向右上方填入2、3、4…,如果右上方已有數字,則向上移兩格繼續填寫
3、horse法生成奇階幻方
(1)對於所有的奇階幻方,在第一行居中的方格內放1,向左走1步,下走2步以跳馬步,依次填入2、3、4…,
若出到方陣下方,把該數字填到本該填數所在列上方相應的格;
若出到方陣右方,把該數字填到本該填數所在行的左方相應的格;
如果落步格已有數字, 則向下移一格繼續填寫。
(2)n階奇階幻方,若n為不是3的倍數,那麼在任意一格內放1,向左走1步,下走2步以跳馬步,依次填入2、3、4…,
若出到方陣下方,把該數字填到本該填數所在列上方相應的格;
若出到方陣右方,把該數字填到本該填數所在行的左方相應的格;
如果落步格已有數字, 則向上移一格繼續填寫
二、當n為偶數時稱為偶階幻方;
偶階幻方分為雙偶幻方和單偶幻方。
當n可以被4整除時,我們稱該偶階幻方為雙偶幻方,如8階、12階、16階等;
當n不可被4整除時,我們稱該偶階幻方為單偶幻方,如6階、10階、14階等
1、雙偶數幻方
(1)spring法生成雙偶幻方
方法:順序填數,以中心點對稱互換數字。
第一步,先令a(i,j)=(i-1)*n+j,
即第一行從左到可分別填寫1、2、3、……、n;
即第二行從左到可分別填寫n+1、n+2、n+3、……、2n;…………n^2
第二步,進行對稱交換。
2、單偶數幻方
當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個奇數(2m+1階)子方陣。
按上述奇數階幻方給分解的4個子方陣對應賦值
上左子陣最小(i),下右子陣次小(i+v),下左子陣最大(i+3v),上右子陣次大(i+2v)
即4個子方陣對應元素相差v,其中v=n*n/4
四個子矩陣由小到大排列方式為
① ③④ ②
然後作相應的元素交換:a(i,j)與a(i+k,j)在同一列做對應交換
(jn-t+2),a(t-1,0)與a(t+k-1,0);a(t-1,t-1)與a(t+k-1,t-1)兩對元素交換
其中k=n/2,t=(n+2)/4 上述交換使每行每列與兩對角線上元素之和相等。
*/#include
#include
#include
#include int a[256][256
];int
sum;
int check(int
n);void oddmagic(int
n);void doubleevenmagic(int
n);void singleevenmagic(int
n);int
main()
else
if(n%4==2)//
單偶數幻方
else
if(n%4==0)//
雙偶數幻方
if(check(n)==1
)
}return0;
}int check(int
n)
/*測試每一列的和是否為sum
a[0][0]+a[1][0]+a[2][0]+..第一列
*/for(i=0;i)
/*測試對角線上的和是否為sum
a[0][0]+a[1][1]+a[2][2]+...+a[n][n]從左上角到右下角的各
a[0][n-1]+a[1][n-2]+a[2][n-3]+...+a[n-1][0]從右上角到左下角的和
*/for(sum1=0,i=0;i)
if(sum1!=sum)
return0;
if(sum2!=sum)
return0;
else
return1;
}void oddmagic(int
n)else
}}void doubleevenmagic(intn)}
void singleevenmagic(int
n) t=(n-2)/4
;
for(i=0;i)
for(j=0;j)
if((jk-t-1
))
if((i>=t&&i<=k-t-1)&&(j>=t&&j2
))
if(j>1&&j<=t)
}}
奇數階幻方構造法
siamese方法 kraitchik 1942年,pp.148 149 是構造奇數階幻方的一種方法,說明如下 由於幻方的對稱性,也可以把右上改為右下 左上以及左下等方位 實現 include includeusing namespace std int main else if i 0 i n 1...
Python之任意階幻方的構造
本文在用python構造任意階幻方的時候,參考的資料如下 維基百科 幻方 由矩陣構造奇數階幻方的方法,高建國,河南大學學報 python 如下 具體的構造方法可參看以上資料 coding utf 8 利用numpy模組構造幻方 import numpy as np 列表迴圈向左移offset位 de...
幻方的生成
幻方,有時又稱魔方 該稱呼現一般指立方體的魔術方塊 或縱橫圖,由一組排放在正方形中的整數組成,其每行 每列以及兩條對角線上的數之和均相等。通常幻方由從 幻方可以使用 根據幻方階數的不同,產生幻方的方法也不區別 一般可以分為下了三種情況 奇數階幻方 4m階幻方 4m 2階幻方 由於幻方的對稱性,也可以...