how to print magic square

+4 votes
asked Aug 5 by anonymous

2 Answers

0 votes
answered Aug 7 by varshith
void magicsq(int, int [][10]);
 
int main( )
{
    int size;
    int a[10][10];
 
    printf("Enter the size: ");
    scanf("%d", &size);
    if (size % 2 == 0)
    {
        printf("Magic square works for an odd numbered size\n");
    }
    else
    {
        magicsq(size, a);
    }
    return 0;
}
 
void magicsq(int size, int a[][10])
{
    int sqr = size * size;
    int i = 0, j = size / 2, k;
 
    for (k = 1; k <= sqr; ++k) 
    {
        a[i][j] = k;
        i--;
        j++;
 
        if (k % size == 0) 
        { 
            i += 2; 
            --j; 
        }
        else 
        {
            if (j == size) 
            {
                j -= size;
            }
            else if (i < 0)
            {
                i += size;
            }
        }
    }
    for (i = 0; i < size; i++)
    {
        for (j = 0; j < size; j++)
        {
            printf("%d  ", a[i][j]);
        }
        printf("\n");
    }
    printf("\n");
0 votes
answered Aug 7 by (140 points)
// 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;

}
Welcome to OnlineGDB Q&A, where you can ask questions related to programming and OnlineGDB IDE and and receive answers from other members of the community.
...