幻方的構造模板

2021-09-08 04:19:00 字數 2449 閱讀 4083

/*

幻方的計算:

計算任意階數幻方的各行、各列、各條對角線上所有數的和的公式為: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階幻方 由於幻方的對稱性,也可以...