Навигация Форума
Вы должны войти, чтобы создавать сообщения и темы.

Лабиринт. Как вернуть подводную лодку на базу.

Очень интересное задание олимпиады по программированию на сайте Учи.ру - это "Лабиринт".

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

Мы решали задачу так.

Предполагая, что лодка может быть на любой клетке, мысленно представляем себе несколько клеток где может быть лодка. Выбираем самые дальние углы и труднодоступные места. И дальше прикидываем, где окажется лодка после выполнения каждого шага программы. Необходимо так написать код, чтобы в конечном итоге, по этой программе лодка из любой клетки вернулась на базу.

Покажем на примере задания для 5-7 классов поэтапный ход решения.

Исходная картинка.

Цифрами обозначим на картинке несколько предполагаемых мест нахождения лодки (пусть это будет девять мест для нашего удобства).

После тщательного предварительного анализа "в уме" пишем первый шаг программы - указываем лодке передвинуться на один шаг вправо:

1. boat.right(1)

После выполнения первого шага предполагаемые места нахождения лодки окажутся в следующем положении:

Далее продолжаем обдумывать куда направить лодку на следующем шаге программы, чтобы это перемещение лодки подходило для любого предполагаемого места. Напишем следующую инструкцию нашей программы и покажем где должна оказаться лодка для любого из выбранных нами мест нахождения.

1. boat.right(1)
2. boat.up(8)

Продолжим поэтапное написание программы и показ на картинке мета нахождения лодки.

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)

Далее четвертый шаг программы:

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)
4. boat.down(6)

Пятый шаг программы:

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)
4. boat.down(6)
5. boat.left(1)

Шестой шаг программы:

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)
4. boat.down(6)
5. boat.left(1)
6. boat.down(5)

Седьмой шаг программы:

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)
4. boat.down(6)
5. boat.left(1)
6. boat.down(5)
7. boat.left(2)

Восьмой шаг программы:

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)
4. boat.down(6)
5. boat.left(1)
6. boat.down(5)
7. boat.left(2)
8. boat.up(3)

И последний заключительный шаг программы:

1. boat.right(1)
2. boat.up(8)
3. boat.right(8)
4. boat.down(6)
5. boat.left(1)
6. boat.down(5)
7. boat.left(2)
8. boat.up(3)
9. boat.left(1)

Как мы видим на картинке, лодка из любого предполагаемого нами места на девятом шаге программы оказывается на базе.

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

Ниже, для большей наглядности, мы приложили анимированную картинку передвижений лодки на каждом шаге программы.

Решения на другие задания олимпиад Учи.ру смотрите на нашем канале в Ютьюбе.

Копировать не надо!