C language to achieve the Magic square algorithm (magic square cube singular Rubik's Cube to achieve) _c language

Source: Internet
Author: User
Tags first row

For example, the third-order demon Phalanx is:

What is the rule of the demon Phalanx?

The Magic square is divided into magical square and even magic square. And even Magic square is divided into 4 multiples (such as 4,8,12 ...). And not multiples of 4 (e.g. 6,10,14 ...). ) Two kinds. The following are described separately.

2 Odd Rubik's Cube algorithm

The rule and algorithm of 2.1 odd Rubik's Cube

Odd Rubik's Cube (Order n = 2 * m + 1,m =1,2,3 ...) ) The following laws:

The number 1 is located in the middle of the first row of the square array;
Number A (1 < a≤n2) Number of rows is 1 less than the number of rows, if the A-1 row number is 1, then A's row number is n;
Number A (1 < A≤N2) is larger than the number of A-1 columns 1, if the A-1 column number is n, then a column number 1;
If A-1 is a multiple of n, the number of rows a (1 < A≤N2) is 1 greater than the number of A-1 rows, and the number of columns is the same as A-1.

The realization of C language of 2.2 odd Rubik's Cube algorithm

Copy Code code as follows:

#include <stdio.h>
author:http://furzoom.com/
n is the cube order
#define N 11

int main ()
{
int a[n][n];
int i;
int col,row;

Col = (N-1)/2;
row = 0;

A[row][col] = 1;

for (i = 2; I <= n*n; i++)
{
if ((i-1)%N = = 0)
{
row++;
}
Else
{
If row = 0, then row = N-1, or row = Row-1
row--;
row = (row+n)%N;

If col = N, then col = 0, or col = col + 1
Col + +;
Col%= N;
}
A[row][col] = i;
}
for (row = 0;row<n;row++)
{
for (col = 0;col < N; col + +)
{
printf ("%6d", A[row][col]);
}
printf ("\ n");
}
return 0;
}

Algorithm 2: Order n = 4 * m (M =1,2,3 ...) ) The laws of the Rubik's Cube are as follows:

By numbers from small to large, that is, 1,2,3......n2 order to the magic square from left to right, from top to bottom to fill;
Dividing the magic square into several 4x4 matrices, and removing the elements on the diagonal of the Sub square;
The removed elements are then filled in the order from large to small to the vacant place in the NxN square.

C Language Implementation

Copy Code code as follows:

#include <stdio.h>
author:http://furzoom.com/
n is the cube order
#define N 12

int main ()
{
int a[n][n];//storage Rubik's Cube
int temparray[n*n/2];//storage of removed elements
int i;//loop variable
int col, row;//col column, row row

Class
i = 1;
for (row = 0;row < N; row++)
{
for (col = 0;col < N; col + +)
{
A[row][col] = i;
i++;
}
}
Remove the diagonal elements from the matrix and discharge them in the order of small to large
i = 0;
for (row = 0;row < N; row++)
{
for (col = 0;col < N; col + +)
{
if ((col% 4 = row% 4) | | (3 = = (col% 4 + row% 4))
{
Temparray[i] = A[row][col];
i++;
}
}
}
To populate the NxN square with the removed elements in order from large to small
i = N*N/2-1;
for (row = 0;row < N; row++)
{
for (col = 0;col < N; col + +)
{
if ((col% 4 = row% 4) | | (3 = = (col% 4 + row% 4))
{
A[row][col] = Temparray[i];
i--;
}
}
}
Output Phalanx
for (row = 0;row < N; row++)
{
for (col = 0;col < N; col + +)
{
printf ("%5d", A[row][col]);
}
printf ("\ n");
}
return 0;
}

3.2 Order n = 4 * m + 2 (M =1,2,3 ...) ) Rubik's Cube (single magic Cube)

Algorithm

Set k = 2 * m + 1; The Rubik's Cube is a more complicated one in the Rubik's Cube.

The Rubik's Cube is divided into a, B, C, D four K-order matrices, the following figure of the four square matrices are singular phalanx, using the method mentioned above in turn A, D, B, c filled as a magic cube.
Exchange A, C Rubik's Cube elements, the middle line of the Rubik's Cube, Exchange from the middle column to the right of the M column corresponding elements; for other rows, swap the corresponding elements from left to right m columns.
Exchange B, D cube elements, Exchange

Copy Code code as follows:

#include <stdio.h>
author:http://furzoom.com/
n is the cube order
#define N 10

int main ()
{
int A[n][n] = {{0}};//storage Rubik's Cube
int i,k,temp;
int col,row;//col column, row row

Class
K = N/2;
Col = (k-1)/2;
row = 0;
A[row][col] = 1;
Create Magic Cube A
for (i = 2; I <= k*k; i++)
{
if ((i-1)%k = = 0)//The previous number is a multiple of 3
{
row++;
}
Else
{
If row = 0, then row = N-1, or row = Row-1
row--;
row = (row+k)%k;

If col = N, then col = 0, or col = col + 1
Col + +;
Col%= K;
}
A[row][col] = i;
}

Generate B, C, D Rubik's Cube according to a
for (row = 0;row < K; row++)
{
for (col = 0;col < K; col + +)
{
A[ROW+K][COL+K] = A[row][col] + k*k;
A[ROW][COL+K] = A[row][col] + 2*k*k;
A[row+k][col] = A[row][col] + 3*k*k;
}
}

Swap A and C
for (row = 0;row < k;row++)
{
if (row = = K/2)//middle row, swap from middle column to right m column, N = 2* (2m+1)
{
for (col = k/2; col < k-1; col++)
{
temp = A[row][col];
A[row][col] = A[row + K][col];
A[row + K][col] = temp;
}
}
else//other rows, switching from left to right m column, N = 2* (2m+1)
{
for (col = 0;col < k/2;col++)
{
temp = A[row][col];
A[row][col] = A[row + K][col];
A[row + K][col] = temp;
}
}
}

Swap B and D
for (row = 0; row < k;row++)//Swap middle column left m-1 column, N = 2* (2m+1)
{
for (i = 0;i < (k-1)/2-1;i++)
{
temp = a[row][k+ K/2-i];
a[row][k+ K/2-I] = A[row + K][K+K/2-i];
A[row + K][K+K/2-i] = temp;
}
}

Output Magic Square
for (row = 0;row < N; row++)
{
for (col = 0;col < N; col + +)
{
printf ("%5d", A[row][col]);
}
printf ("\ n");
}

return 0;
}

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.