You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

62 lines
1.2 KiB

#include <stdio.h>
void create_magic_square(int n, char magic_square[n][n]);
void print_magic_square(int n, char magic_square[n][n]);
int main(void) {
int n = 0;
printf("Magic square of specified size.\n");
while (n % 2 != 1) {
printf("Enter odd number between 1 and 99: ");
scanf("%2d", &n);
}
char magic_square[n][n];
create_magic_square(n, magic_square);
print_magic_square(n, magic_square);
return 0;
}
void create_magic_square(int n, char magic_square[n][n]) {
short i, r, c, prevr, prevc;
for (r = 0; r < n; r++)
for (c = 0; c < n; c++)
magic_square[r][c] = 0;
// Put 1 into first row, middle column
r = prevr = 0;
c = prevc = n / 2;
i = 1;
do {
// Wrap over row
if (r == -1)
r = n - 1;
// Wrap over column
if (c == n)
c = 0;
// If element already occupied, put new right below previous placed
if (magic_square[r][c] != 0) {
r = prevr + 1;
c = prevc;
}
prevr = r;
prevc = c;
// Move one row up and to to the next column
magic_square[r--][c++] = i++;
} while (i <= (n * n));
}
void print_magic_square(int n, char magic_square[n][n]) {
short r, c;
for (r = 0; r < n; r++) {
for (c = 0; c < n; c++) {
printf("%4hd", magic_square[r][c]);
}
printf("\n");
}
}