Find an n × n matrix with different numbers from 1 to n 2, so the sum in each row, column and both main diagonals are odd.
Input
The only line contains odd integer n (1 ≤ n ≤ 49).
Output
Print n lines with n integers. All the integers should be different and from 1 to n 2. The sum in each row, column and both main diagonals should be odd.
Examples
input
1
output
1
input
3
output
2 1 4
3 5 7
6 9 8
Solution:
#include <bits/stdc++.h> using namespace std; const int N = 1234; int a[N][N], b[N][N]; int main() { int n; scanf("%d", &n); a[0][0] = 1; int k = 1; while (k < n) { memset(b, 255, sizeof(b)); for (int i = 0; i < k; i++) { for (int j = 0; j < k; j++) { b[i + 1][j + 1] = a[i][j]; } } int ptr = k * k; for (int i = 1; i <= k; i++) { b[i][0] = (ptr += 2); b[i][k + 1] = (ptr += 2); } b[0][k / 2 + 1] = (ptr += 2); b[k + 1][k / 2 + 1] = (ptr += 2); ptr = k * k - 1; k += 2; for (int i = 0; i < k; i++) { for (int j = 0; j < k; j++) { a[i][j] = b[i][j]; if (a[i][j] == -1) { a[i][j] = (ptr += 2); } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j > 0) { putchar(' '); } printf("%d", a[i][j]); } puts(""); } return 0; }
Related posts:
Mysterious Crime
Teams
Fox And Jumping
Flights
K Integers
Kuroni and Simple Strings
Washer, Dryer, Folder
Vertical decomposition
Graph Coloring
Dima and Two Sequences
Big Problems for Organizers
Letters and Question Marks
Finding bridges in a graph in $O(N+M)$
Not Same
Haar Features
Bear and Destroying Subtrees
Om Nom and Dark Park
Transmitting Levels
Black and White Tree
Scheduling jobs on two machines
Matching Names
Interesting Array
Cow and Message
Limak and Shooting Points
Field expansion
AND Segments
ELCA
Captain Marmot
Dream Team
Burnside's lemma / Pólya enumeration theorem
Bribes
Length of the union of segments