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:
Summer Homework
New Year and Domino
Ehab's REAL Number Theory Problem
Ehab and Path-etic MEXs
Game
Friends
Dexterina’s Lab
Fox And Jumping
New Year and Three Musketeers
Segments on the Line
Exercising Walk
Chain Reaction
Unusual Graph
Au Pont Rouge
Banners
Ramesses and Corner Inversion
Rooks and Rectangles
Amr and Pins
Strange Function
Falling Blocks
Orac and Medians
Sereja and Intervals
Race
Cow and Fields
Xors on Segments
Pie Rules
Flawed Flow
Sparse Table
Cinema
Chat Order
Dreamoon Likes Strings
Tree Factory