3*3三阶魔方阵解决方法
3*3三阶魔方阵
用数组求一个3*3的三阶魔方我找了很多关于这方面的资料但是没有有我想要的!
要求: 算法和代码!
三阶魔方阵:
8 1 6
3 5 7
4 9 2
结果打印出1~n*n的自然数构成的魔方阵
------解决方案--------------------
如下是算法伪代码:
用数组求一个3*3的三阶魔方我找了很多关于这方面的资料但是没有有我想要的!
要求: 算法和代码!
三阶魔方阵:
8 1 6
3 5 7
4 9 2
结果打印出1~n*n的自然数构成的魔方阵
------解决方案--------------------
如下是算法伪代码:
- C/C++ code
int[][] MagicMatrix ( int n ) { //Odd order. if ( mod ( n, 2 ) ) [ mj, mi ] = MakeMeshGridSquareMatrix ( n ); // mj : mesh along row, // while mi : mesh along column // both mj and mi are square matrix // matrix operation A = mod ( mi + mj - ( n + 3 ) / 2.0, n ); B = mod ( mi + 2 * mj - 2, n ); M = n * A + B + 1; // Doubly even order. elif ( !mod ( n, 4 ) ) [ mj, mi ] = MakeMeshGridSquareMatrix ( n ); K = ( floor ( mod ( mi, 4 ) / 2.0 ) == floor ( mod ( mj, 4 ) / 2.0 ); // K is a logic matrix // each element judge by // mj and mi M = MakeSquareMatrix ( n ); // to make array which from 1 to n * n as a n * n square M [ K ] = n * n + 1 - M [ K ]; // modify matrix M each element from matrix K // Singly even order else p = n / 2; M = MagicMatrix ( p ); // Recursive call procedure; M = [ M M + 2 * p ^ 2 M + 3 * p ^ 2 M + p ^ 2 ] // make a new matrix which elements layout // like this if ( n == 2 ) return; // error end if i = MakeRank ( p ); // get one column which elements are from 1 to p; k = ( n - 2 ) / 4.0; j = MakeRow ( k, n ); // make a row that [ 1 to k join with (n - k + 2) to n ]; M [ Rank(i, i + p), j ] = M [ Rank(i + p; i), j ]; // Rank 表示含有指定两个元素的列向量 i = k + 1; j = Row ( 1, i ); // Row 表示含有指定两元素的行向量 M [ Rank(i, i + p), j ] = M [ Rank(i + p, i), j ]; end if }