Районная олимпиада по информатике. 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
Комментарий/решение:
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);
}
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.