幻方,有時又稱魔方(該稱呼現一般指立方體的魔術方塊)或縱橫圖,由一組排放在正方形中的整數組成,其每行、每列以及兩條對角線上的數之和均相等。通常幻方由從
幻方可以使用
根據幻方階數的不同,產生幻方的方法也不區別
一般可以分為下了三種情況:
奇數階幻方
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...