Весенние старты 2025 з6

Конкурс юных программистов «Весенние старты» 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)       
       


Рецензии
Я почти уверен, Григорий, что находится небольшое количество ребят, которые эту абстрактную логику схватывают на лету. Это те ребята, которые могут составить костяк будущих Айтишников и разработчиков прикладных программ. Но вот опять же полагаю, что для большинства учеников - это китайская грамота. Просто я вспоминаю своё время, когда нас учили программированию. Причём, без компьютеров. Что называется учили плавать в бассейне без воды. Очень немногие из нас понимали о чём идёт речь. Или современные ребята стали умнее нас ? Правда, сейчас это трудно определить, потому что появился ИИ, который без проблем составляет любые программы - где гарантия, что ученики не пользуются услугами Дип сика?

С искренним уважением, Алексей.

Алексей Кимяев   26.04.2026 11:55     Заявить о нарушении
Спасибо за отзыв, Алексей!

Пока не появились персональные компьютеры достаточно было одного-двух программирующих студентов на группу. Можно было прийти на зачёт с большой простынёй, через пень колоду что-то говорить преподавателю и получить зачёт.

А вот когда в конце 80-х появились первые персональные компьютеры в вузах и надо было в присутствии преподавателя самостоятельно сделать программу, вот тогда была трагедия. Да и учили студентов программированию часто не систематически, начинали с середины, самого главного могли не сказать.

В школьной информатике в первые годы программирование было основным разделом. Но немногие понимали.

Вчера у нас в Иркутске прошли очередные Весенние старты. Со всего города немного меньше полутора сотен учеников с 3 по 11 класс. Но с нулями ушло не так много участников.

С ИИ постоянно боремся. Вчера было за это 3 дисквалификации.

Но многие уже в школе пишут программы на профессиональном уровне.

Григорий Рейнгольд   26.04.2026 12:19   Заявить о нарушении
Это замечательно! Я жалею, что моё время прошло. Если бы начинать сейчас, то программирование стало бы моим коньком.

С искренним уважением, Алексей.

Алексей Кимяев   26.04.2026 13:09   Заявить о нарушении
На это произведение написаны 3 рецензии, здесь отображается последняя, остальные - в полном списке.