Районная олимпиада по информатике. 2008-2009 учебный год.


Задача E. Спираль

Ограничение по времени:
2 seconds
Ограничение по памяти:
64 megabytes

Спираль размера $N$ – это таблица натуральных чисел размером $N$x$N$, в центре таблицы всегда 1, справа от нее 2, спираль закручивается против часовой стрелки. Выведите спираль размера $N$.
Формат входного файла
Единственная строка входного файла содержит одно число – $N$ ($1 <= N < 100$, $N$ - нечетное).
Формат выходного файла
Выведите $N$ строк по $N$ чисел – спираль размера $N$. Числа в строках должны быть разделены пробелами.
Примеры:
Вход
1
Ответ
1
Вход
3
Ответ
5 4 3
6 1 2
7 8 9
Вход
5
Ответ
17 16 15 14 13
18  5  4  3 12
19  6  1  2 11
20  7  8  9 10
21 22 23 24 25
посмотреть в олимпиаде

Комментарий/решение:

  1
2018-12-08 18:32:56.0 #

показать/скрыть код

пред. Правка 2   0
2022-02-05 19:43:12.0 #

показать/скрыть код

void solve() {

cin >> n;

vector<vector<ll>> v(n, vector<ll>(n, 0));

ll nums = n * n, l_start = 0, l_end = n - 1, r_start = 0, r_end = n - 1;

while (nums >= 1) {

for (int i = r_end; i >= r_start; i -= 1) {

v[l_end][i] = nums;

nums -= 1;

}

l_end -= 1;

for (int i = l_end; i >= l_start; i -= 1) {

v[i][r_start] = nums;

nums -= 1;

}

r_start += 1;

for (int i = r_start; i <= r_end; i += 1) {

v[l_start][i] = nums;

nums -= 1;

}

l_start += 1;

for (int i = l_start; i <= l_end; i += 1) {

v[i][r_end] = nums;

nums -= 1;

}

r_end -= 1;

}

show(v);

}