Another Way to find Magic Square .. #include #include void printmat(int n, int a[][n]); void copymat(int n, int b[][n], int a[][n]); void magicsq(int n, int a[][n]); void main() { int a; printf("Enter order:"); scanf("%d", &a); if ((a % 2) != 1) { printf("\nPlease Enter a odd"); exit(0); } int m[a][a]; magicsq(a, m); printmat(a, m); } void magicsq(int n, int a[][n]) { for (int k = 1; k <= n * n; k++) { for (int i = 0; i < n; i++) { a[i][0] = k; k += 1; for (int j = 1; j < (n); j++) { a[i][j] = k + 1; k += 1; j += 1; a[i][j] = k - 1; k += 1; } } } for (int j = 1; j < n; j++) { for (int i = 0; i < n; i++) { if (i == j) { break; } int k = a[0][j]; for (int x = 0; x < n - 1; x++) { a[x][j] = a[x + 1][j]; } a[n - 1][j] = k; } } int b[n][n]; int i, j, k, count; for (k = 0; k < n; ++k) { count = 0; i = 0; j = k; do { b[count][k] = a[i][j]; count++; i++; j++; if (j >= n) j = 0; } while (count < n); } copymat(n, b, a); } void printmat(int n, int a[][n]) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d\t", a[i][j]); } printf("\n"); } } void copymat(int n, int b[][n], int a[][n]) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { a[i][j] = b[i][j]; } } }Output:Enter order:51 8 12 20 2413 17 25 4 622 5 9 11 1810 14 16 23 219 21 3 7 15 Previous Next