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