幻方的生成

2021-06-14 11:52:34 字數 1307 閱讀 5811

幻方,有時又稱魔方(該稱呼現一般指立方體的魔術方塊)或縱橫圖,由一組排放在正方形中的整數組成,其每行、每列以及兩條對角線上的數之和均相等。通常幻方由從

幻方可以使用

根據幻方階數的不同,產生幻方的方法也不區別

一般可以分為下了三種情況:

奇數階幻方

4m階幻方

4m+2階幻方

(由於幻方的對稱性,也可以把右上改為右下、左上以及左下等方位)

4m階的情況

將4m階分成m*m個4*4的塊,每塊裡面值改變對角線和負對角線上的數字,將對角線上的數字

4m+2階的情況

這個情況的構造情況比較麻煩

詳見下面附上求n階幻方的**,n為以上三種情況

#include #include const int n = 101;

int n;

int magic[n][n];

void swap(int &a, int &b)

void printmagic(int n)

}void createoddmagic(int n, int si = 0, int sj = 0, int add = 0)

else if (ni == -1)

else if (nj >= n)

magic[si+ni][sj+nj] = add + inc++;

i = ni;

j = nj;

} //printmagic(n);

}void create4(int si, int sj, int n)

} }}void create4magic(int n) }}

void create4m2magic(int n)

if (i != m)

swap(magic[i][j], magic[i+n/2][j]);

else

swap(magic[i][m], magic[i+n/2][m]);

} for (i = 0; i < n/2; i++) }

int main(void)

else if (n % 4 == 0)

else

printmagic(n);

} return 0;

}

生成幻方的小程式

將幻方儲存在乙個二維陣列中。起始時把數1放在0行的中間,剩下的數2,3,n 依次向上移動一行並向右移動一列。當可能越過陣列邊間時需要 繞回 到陣列的另一端。例如 如果需要把下乙個數放到 1行,我們就將他儲存到n 1行 最後一行 如果需要把下乙個數放到n列,我們就將其儲存到0列。如果某個特定的陣列元素...

奇數幻方 輸入N得到NXN幻方

include intmain for int j 0 j1 j h j sum1 for int j 0 j1 j l j sum2 for int i 0 i 判斷每行 列相等個數 for int j 0 j1 j 計算對角線數字和 e n 1 for int i 0 i1 i 計算反對角線數字...

四階幻方 反幻方c

把1 16的數字填入4x4的方格中,使得行 列以及兩個對角線的和都相等,滿足這樣的特徵時稱為 四階幻方。四階幻方可能有很多方案。如果固定左上角為1,請計算一共有多少種方案。比如 1 2 15 16 12 14 3 5 13 7 10 4 8 11 6 9 以及 1 12 13 8 2 14 7 11...