How to Solve a Magic Square ?
How to Solve a Magic Square
- A magic square is a square array of numbers consisting of the distinct positive integers 1, 2, ..., arranged.
- The sum of the numbers in any horizontal, vertical, or main diagonal line is always the same number known as the Magic Constant.
- The magic constant of a normal magic square depends only on n and has the following value:
- M = n(n^2+1)/2

How to Solve a Magic Square
Example
Magic Square of size 4
-----------------------
8 3 14 13
2 0 12 7
0 11 6 1
10 5 4 9
Sum in each row & each column = 4*(4^2+1)/2 = 34
Read Also
Sample Code in C
#include<stdio.h>
#include<string.h>
// A function to generate odd sized magic squares
void generateSquare(int n)
{
int magicSquare[n][n];
// set all slots as 0
memset(magicSquare, 0, sizeof(magicSquare));
// Initialize position for 1
int i = n/2;
int j = n-1;
// One by one put all values in magic square
for (int num=1; num <= n*n; )
{
if (i==-1 && j==n) //3rd condition
{
j = n-2;
i = 0;
}
else
{
// 1st condition helper if next number
// goes to out of square's right side
if (j == n)
j = 0;
// 1st condition helper if next number
// is goes to out of square's upper side
if (i < 0)
i=n-1;
}
if (magicSquare[i][j]) //2nd condition
{
j -= 2;
i++;
continue;
}
else
magicSquare[i][j] = num++; //set number
j++; i--; //1st condition
}
// Print magic square
printf("Magic Square n=%d:\nSum of "
"each row or column %d:\n\n", n, n*(n*n+1)/2);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%3d ", magicSquare[i][j]);
printf("\n");
}
}
// Driver program to test above function
int main()
{
int n = 5; // Works only when n is odd
generateSquare (n);
return 0;
}
Output
Magic Square n=5:
Sum of each row or column 65:
9 3 22 16 15
2 21 20 14 8
25 19 13 7 1
18 12 6 5 24
11 10 4 23 17