Весенние старты 2025 з6
В 2008 году в Иркутске по инициативе Городского методического совета учителей информатики первый раз состоялся Городской конкурс юных программистов "Весенние старты". С тех пор это соревнование проходит ежегодно и в нём принимает участие не меньше ста школьников. Первоначально было возрастное ограничение - допускались участники не старше 8 класса, однако затем стали допускать всех независимо от возраста.
До 2017 года в конкурсе была одна номинация "Решение задач" (фактически олимпиада) А в 2017 году появилась вторая номинация - "Смотр проектов" (конференция, на которой юные программисты защищают свои проекты, над которыми работали около года).
-----------------------------------
г. Иркутск
Конкурс юных программистов «Весенние старты» 2025
Номинация "Решение программистских задач"
Автор заданий Г.Б. Рейнгольд
Задача F. Заполнение таблицы (25 баллов)
Внимательно посмотрите на приложенные таблицы, как они заполнены.
В левом верхнем углу находится единица. Справа от неё – двойка.
Слева/снизу от двойки – тройка и далее влево/вниз. Когда очередное число окажется в первой колонке, следующее число будет находиться ниже, если можно, либо правее (если нельзя), а затем движение пойдёт вправо/вверх. Когда очередное число окажется в первой строке, следующее будет правее, если можно, либо ниже (если нельзя). И так далее, пока не заполнится вся таблица.
Посмотрите внимательно на рисунки.
Нужно сделать программу, заполняющую такую таблицу. Количество строк и колонок задаётся.
Формат входных данных: два целых в одной строке (> 1 и <= 100).
Формат выходных данных: столько строк, каково первое число. В каждой
строке столько целых чисел, каково второе число.
Пример 1:
Вход – 3 2
Выход –
1 2
3 5
4 6
Пример 2:
Вход – 3 5
Выход –
1 2 6 7 12
3 5 8 11 13
4 9 10 14 15
Авторское решение (Python)
# Рейнгольд Г.Б.
# Весенние старты 2025 Задача F Заполнение таблицы
# Для того, чтобы справиться с этой несложной задачей, нужно уметь уверенно
# работать с переменными, ветвлениями, циклами и массивами.
def vime(ns, nk, a): # Вывод таблицы
for i in range(1, ns + 1, 1):
for j in range(1, nk + 1, 1):
#if a[i][j] < 10:
#print(' ', end = '') # Выравнивание колонок для удобного тестирования
print(a[i][j], end = ' ')
print()
def spm(ns, nk): # Создание пустой таблицы заданных размеров (количество строк и колонок
a = [0]*(ns + 2) # В таблице для удобства работы создаются по две лишних колонки и строки,
# заполненных "-1" слева и справа, сверху и снизу
for i in range(0, ns + 2, 1):
a[i] = [0]*(nk + 2)
for i in range(0, ns + 2, 1): # "Лишние" колонки
a[i][0] = -1
a[i][nk + 1] = -1
for i in range(0, nk + 2, 1): # "Лишние" строки
a[0][i] = -1
a[ns + 1][i] = -1
return a
ns, nk = map(int, input().split())
a = spm(ns, nk)
n = ns * nk
i = 1
x = 1
y = 1
a[y][x] = 1
while i < n:
# Один раз вправо, или вниз, в зависимости от возможностей
if a[y][x + 1] == 0:
x += 1
elif a[y + 1][x] == 0:
y += 1
i += 1
if i > n: # превышение индекса
break
a[y][x] = i
while a[y + 1][x - 1] == 0: # Диагональное направление влево/вниз, многократно
i += 1
if i > n: # превышение индекса
break
x -= 1
y += 1
a[y][x] = i
# Один раз вниз, или вправо, в зависимости от возможностей
if a[y + 1][x] == 0:
y += 1
elif a[y][x + 1] == 0:
x += 1
i += 1
if i > n: # превышение индекса
break
a[y][x] = i
while a[y - 1][x + 1] == 0: # Диагональное направление вправо/вверх, многократно
i += 1
if i > n: # превышение индекса
break
x += 1
y -= 1
a[y][x] = i
vime(ns, nk, a)
Свидетельство о публикации №226042501439
Александр Михельман 25.04.2026 18:03 Заявить о нарушении