14

C/C++ Program for Magic Square.

program solution

// C program to generate odd sized magic squares

#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("The Magic Square for 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 = 7; // Works only when n is odd

    generateSquare (n);

    return 0;

}

Output

The Magic Square for n=7:

Sum of each row or column 175:

 

20 12 4 45 37 29 28

11 3 44 36 35 27 19

2 43 42 34 26 18 10

49 41 33 25 17 9 1

40 32 24 16 8 7 48

31 23 15 14 6 47 39

22 21 13 5 46 38 30