По периметру большого прямоугольного зала устроены небольшие ниши, отделённые друг от друга стенами. Роботу надо обойти все эти ниши. Для начала надо научить его двигаться вдоль одной стены. Напишите программу, которая позволит роботу перейти в следующую по часовой стрелке нишу (клетку) и покрасить её.
Ответ нейросети
01 февраля 2026 08:49
Ниже подробное решение с объяснениями и примером кода. Цель: роботу нужно обходить по периметру зала, переходя в следующую нишу по часовой стрелке и окрашивая её.
- Идея и общий подход
- Пусть вокруг зала расположены ниши вдоль периметра прямоугольника. Общее число ниш в периметре равно P = 2*(n + m) - 4, где n — число ниш по горизонтали (вдоль верхней стороны), m — число ниш по вертикали (вдоль левой стороны).
- Задача: составить путь по периметру в clockwise- направлении, пройтись по каждому элементу пути и покрасить его.
- Практически удобно построить список координат всех периметральных клеток в порядке обхода по часовой стрелке, начиная с левого верхнего угла.
- Затем для каждой клетки из этого списка выполняем действие: покрасить клетку и перейти к следующей клетке в списке (последнюю клетку — к первой, чтобы цикл был замкнутым).
- Пошаговый план
- Определить размеры: n — число ниш по горизонтали, m — число ниш по вертикали.
- Построить список path из координат всех периметральных клеток в порядке clockwise:
- верхняя сторона: (0, 0) … (0, n-1)
- правая сторона (без повторной верхней клетки): (1, n-1) … (m-1, n-1)
- нижняя сторона в обратном порядке: (m-1, n-2) … (m-1, 0)
- левая сторона вверх: (m-2, 0) … (1, 0)
- Особые случаи:
- если n = 1: путь consists из всех клеток в одном столбце: (0,0), (1,0), …, (m-1,0)
- если m = 1: путь consists из всех клеток в одной строке: (0,0), (0,1), …, (0,n-1)
- Пройдемся по path, для каждого элемента:
- покрасить текущую нишу
- перейти к следующей нише: путь[(i+1) mod len(path)]
- Пример реализации на Python
Функция строит порядок обхода периметра в-clockwise
def border_clockwise(n, m): """ n - число ниш по горизонтали (ширина) m - число ниш по вертикали (высота) Возвращает список координат (r, c) в порядке обхода по часовой стрелке. Координаты считаются нулевыми, начиная с верхнего левого угла. """ path = [] if n <= 0 or m <= 0: return path
# Особые случаи
if n == 1:
for r in range(m):
path.append((r, 0))
return path
if m == 1:
for c in range(n):
path.append((0, c))
return path
# Верхняя сторона: слева направо
for c in range(0, n):
path.append((0, c))
# Правая сторона: сверху вниз (без повторной верхней клетки)
for r in range(1, m):
path.append((r, n - 1))
# Нижняя сторона: справа налево
for c in range(n - 2, -1, -1):
path.append((m - 1, c))
# Левая сторона: снизу вверх (без повторной нижней и верхней клеток)
for r in range(m - 2, 0, -1):
path.append((r, 0))
return path
Пример имитации движения и окрашивания
def simulate_paint(n, m): path = border_clockwise(n, m)
def paint_cell(r, c):
print(f"Покрасил нишу ({r}, {c})")
if not path:
print("Периметр пустой.")
return
for i, (r, c) in enumerate(path):
paint_cell(r, c)
nr, nc = path[(i + 1) % len(path)]
print(f"Переходим к следующей по часовой стрелке нише: ({nr}, {nc})")
Пример: прямоугольник 6 ниш по горизонтали и 4— по вертикали
if name == "main": simulate_paint(6, 4)
Пояснения к примеру
- Для n = 6 и m = 4 путь будет состоять из P = 2*(6+4)-4 = 20 клеток.
- Начинаем, например, в верхнем левом углу: (0,0), затем идём вдоль верхней стороны: (0,1), (0,2), ..., (0,5), затем вниз по правой стороне: (1,5), (2,5), (3,5), затем в обратном порядке по нижней стороне и т. д., пока не вернёмся к начальному (0,0).
- Каждую нишу мы окрашиваем по мере посещения. После покраски текущей ниши робот перемещается в следующую по часовой стрелке.
- Что возвращает и усложнения
- Временная сложность: O(P), где P — число ниш по периметру (P = 2*(n+m) - 4, или P = n*m если рассматривать degenerate случаи n=1 или m=1).
- Пространство: O(P) на хранение пути периметра.
- Если нужно, можно сохранять направление и двигаться без хранения полного списка, вычисляя следующую клетку по текущим координатам и размерам манипуляций, но приведённый вариант проще и нагляднее для средней школы.
- Применение к учебной задаче
- Задача просит «перейти в следующую по часовой стрелке нишу и покрасить её». В данном решении это реализовано как проход по списку периметральных клеток в порядке clockwise с покраской каждой клетки при посещении и переходом к следующей.
Если хочешь, могу привести аналогичный вариант на другом языке (C++, Java) или адаптировать под конкретные размеры зала, стартовую позицию и требуемый формат вывода.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



