Below is a 3x3 magic square C code for odd numbers 3 to 15 and displaying the magic sum total number 15 for rows, columns, and diagonals for odd number 3 in Example1 Output. If we scroll down to the comment //Sum up and down diagonals - display at the end on diagonals and the C code below it which display the diagonal magic sum total number 15 for 8, 5, and 2 for odd number 3 in the lower right corner of Example1 Output.
Question: How will I display diagonal magic sum total number 15 for 6, 5, and 4 for odd number 3 in the lower left corner or upper right corner in Example1 Output to look like Example2 or Example3 Outputs?
*Note the C code under the comment //Sum up and down diagonals - display at the end on diagonals works for all odd numbers 3 to 15.
#include <stdio.h>
#define Mag 15
int main(void)
{
int n, col, row, i, j, k, r, c, diag=0;
int magic[Mag][Mag];
printf("\nThis program creates a \"magic square\" of specified odd numbers.");
printf("\nThe size must be an odd number.");
printf("\nEnter odd number from 3 to 15: ");
scanf(" %d", &n);
for (j = 0; j < n+1; j++)
for (k = 0; k < n+1; k++)
magic[j][k] = 0;
row = 0;
col = n / 2;
magic[row][col] = 1;
for (i=2; i <= n * n; i++)
{
if (--row < 0)
row = (n-1);
if (++col > (n-1))
col = 0;
if (magic[row][col] != 0)
{
if (++row > (n-1))
row = 0;
if (--col < 0)
col = (n-1);
while (magic[row][col] != 0)
if (++row > (n-1))
row = 0;
}
magic[row][col] = i;
}
for(r=0; r<n; r++){
for(c=0; c<n; c++){
magic[r][n]+=magic[r][c];}
}
for(c=0; c<n; c++){
for(r=0; r<n; r++){
magic[n][c]+=magic[r][c];}
}
for(r=0; r<n; r++){
magic[n][n]+=magic[r][r];}
for(r=1; r<(n-1); r++){
c = n - r + 1;
diag+=magic[r][c];}
printf("\n\n");
for(r=0; r<(n+1) ; r++){
printf("\n");
for(c=0; c<(n+1) ; c++)
printf("%4d", magic[r][c]);
printf("\n");
}
return 0;
}
Example1 Output
8 1 6 15
3 5 7 15
4 9 2 15
15 15 15 15
Example2 Output
8 1 6 15
3 5 7 15
4 9 2 15
15 15 15 15 15
Example3 Output
15
8 1 6 15
3 5 7 15
4 9 2 15
15 15 15 15