#include #include //as simple as possible: given n, and 2d array, go through it using 2 nested 'for' loops void printMagicSquare(int n, int magicSquare[n][n], int magicConstant) { printf("Magic Square of Order %d:\n", n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("% 3d ", magicSquare[i][j]); } printf("\n"); } printf("\nMagic Constant: %d\n\n", magicConstant); } void generateMagicSquare(int n) { if (n % 4 != 0) { printf("Please enter a valid doubly even order (4, 8, 12, etc.)\n"); exit(1); } int magicSquare[n][n]; int count = 1; int magicConstant = (n * n + 1) * n / 2; //alternatively use memset for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { magicSquare[i][j] = 0; } } //this is heavy duty part for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if ((i % 4 == 0 && j % 4 == 0) || (i % 4 == 3 && j % 4 == 3)) { magicSquare[i][j] = count; } else if ((i % 4 == 1 && j % 4 == 1) || (i % 4 == 2 && j % 4 == 2)) { magicSquare[i][j] = count; } else { magicSquare[i][j] = n * n - count + 1; } count++; } } printMagicSquare(n, magicSquare, magicConstant); } int main() { int n; printf("Enter doubly even number (n >= 4, e.g. 4, 8, 12) for the order of the magic square: "); scanf("%d", &n); generateMagicSquare(n); return 0; }