Magic Square is divided into Class 3 . Odd Order magic square (odd), double even magic square (can be divisible by 4, such as 8,12,16 ...). ), the single magic square (4m+2 form, such as 6,10 ... ), the construction algorithm is different.
In the following program, the algorithm for constructing odd-order magic squares is Merzirac method . The construction algorithm of double-even magic square is Spring method . The construction algorithm of the single-dipole magic square is Strachey method .
Single Magic square:
Place 1 in the center of the first row, and then fill in 2, 3, 4 ... if there is already a number on the top right, move down one of the fields to continue.
Reference: http://blog.csdn.net/zheng0518/article/details/9006281
Double Even magic square:
(1) First fill in the numbers in order. Then, press 4*4 to split it into 2*2 small square.
(2) The number on the diagonal of each small square, replaced by a number complementary to it.
Reference: http://chenxuebiao3.blog.163.com/blog/static/274911182011111911429621/
Single Magic square:
Reference: http://blog.sina.com.cn/s/blog_639b95e90100i6h4.html
The and formula of the diagonal of each column is:sum=n* (n^2+1)/2 n is the order number
The code is as follows:
#include <iostream> #include <stdlib.h> #include <math.h>using namespace Std;int matrix[99][99] = {0 };//Generate Odd magic square void Createoddmagicsquare (int n) {int X=0,y,mun =1;y=n/2;while (mun <= n*n) {Matrix[x][y] = mun;//by x0, y0 detect right is already populated with the number int x0=x;int y0=y;x0--;y0++;//to handle if (x0<0) x0+=n;if (y0 = = N) y0= n-y0;if (0 = = Matrix[x0][y0]) {x = X0;y = y0; }else{//x++;if (x = = N) x = X-n If a number is filled in before the number. Mun + +;}} Generates double-even magic square void createdoubleevenmagicsqure (int n) {int num = 1;//from 1 to n in order (int i=0;i<n;i++) for (int j=0;j<n;j++ ) Matrix[i][j] = num++;//The number on the diagonal of the small square takes its complement for (int i=0;i<n;i++) for (int j=0;j<n;j++) {if (i%4==0 && abs (I-J) %4 = = 0) for (int k=0;k<4;k++) matrix[i+k][j+k] = ABS (N*n +1-matrix[i+k][j+k]); else if (i%4==3 && (i+j)%4 = = 3 ) for (int k=0;k<4;k++) matrix[i-k][j+k] = ABS (N*n +1-matrix[i-k][j+k]);}} Generates a single-even magic square void createsingleevenmagicsqure (int n) {int k = N/2; Createoddmagicsquare (k);//Assign initial value, top left minimum, lower right second, right up again, left down Max for (int i=0;i<k;i++) for (int j=0;j<k;j++) {Matrix[i+k][j+k] = Matrix[i][j] + k*k;matrix[i][j+k] = Matrix[i][j] + k*k*2;matrix[i+k][j] = Matrix[i][j] + k*k*3;} Formula n=4m+2 int m = (n-2)/4;//interchange x direction positive row in left-to-right m-1 for (int i=0;i<m-1;i++) {int buf = Matrix[k/2][i];matrix[k/2][i] = Matri X[k/2+k][i]; Matrix[k/2+k][i] = buf;} int buf = matrix[k/2][k/2];//and positive middle number MATRIX[K/2][K/2] = MATRIX[K/2+K][K/2];MATRIX[K/2+K][K/2] = buf;// Swap other rows except x positive middle row corresponding number m for (int i=0;i<k;i++) for (int j=0;j<k/2;j++) {if (i! = K/2) {int buf = matrix[i][j];matrix[i][j] = MATRIX[I+K][J];MATRIX[I+K][J] = buf;}} Swap rightmost m-1 digits for (int i=0;i<k;i++) for (int j=n-1;j>n-1-(m-1); j--) {int buf = matrix[i][j];matrix[i][j] = matrix[i+ K][J];MATRIX[I+K][J] = buf;}} Magic Square correctly checks bool Check (int n) {int sum = (n (n*n+1))/2;int suma=0,sumb=0;for (int i=0;i<n;i++) {for (int j=0;j<n;j++) SumA + = Matrix[i][j];if (SumA! = sum) return false; SumA = 0; }for (int i=0;i<n;i++) {for (int j=0;j<n;j++) SumA + = Matrix[j][i];if (SumA! = sum) return false; SumA = 0; }for (int i=0;i<n;i++) {Suma+=maTrix[i][i]; SUMB+=MATRIX[I][N-I-1];} if (suma!=sum| | Sumb!=sum) return False;return true;} int main () {int n;cin>>n;if (n%2!=0) createoddmagicsquare (n), else if (n%4 = = 0) createdoubleevenmagicsqure (n); else if (n%2 = = 0) createsingleevenmagicsqure (n); for (int i=0;i<n;i++) {for (int j=0;j<n;j++) cout<<matrix[i][j]<< "\ t"; Cout<<endl<<endl ;} if (! Check (n)) cout<< "The ANS is wrong" <<endl;else cout<< "right answer" <<endl; System ("pause"); return 1;}
The C + + implementation of any order magic square----odd-order magic square, double-even magic square, and single-even magic square.