Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЕОРИЯ АЛГОРИТМОВ.doc
Скачиваний:
10
Добавлен:
18.08.2019
Размер:
93.18 Кб
Скачать
  1. Проверяем делится ли массив на 3 (используем алгоритм из первой задачи). Если массив делится, то переходим к пункту 2. Если не делится, то переходим к пункту 3.

  2. Удаляем каждую вторую метку в массиве слева направо. Переходим к пункту 4.

  3. Удаляем все метки в массиве. Переходим к пункту 4.

  4. Ищем первую ячейку с меткой справа.

  5. Проверяем следующую за ней метку. Если метки нет, то переходим к пункту 7 Если метка есть, то переходим к пункту 6.

  6. Делаем шаг влево. Переходим к пункту 1.

  7. Конец работы.

Задача 1. На ленте машины Поста расположен массив из N меток. Составить программу, действуя по которой машина выяснит, делится ли число на 5. Если да, то после массива через одну пустую секцию поставить метку V . Будем считать, что каретка в начале работы обозревает крайнюю слева метку. Алгоритм

  1. Известно, что вначале каретка обозревает первую слева метку.

  2. Проверяем вторую справа ячейку, если она пустая, то число N на 5 не делится. Переходим на пункт 9.

  3. Проверяем третью справа ячейку, если она пустая, то число N на 5 не делится. Переходим на пункт 9.

  4. Полвеояем четвертую справа ячейку, если она пустая, то число N на 5 не делится. Переходим на пункт 9.

  5. Полвеояем пятую справа ячейку, если она пустая, то число N на 5 не делится. Переходим на пункт 9.

  6. Проверяем шестую срава ячейку. Если ячейка пустая, значит на ленте расположены подряд 5 меток. Следовательно, число N на 5 делится. Переходим на пункт 7. Если ячейка с меткой, значит на ленте расположено более 5 меток, возвращаемся на пункт 2, считая текущую ячейку первой.

  7. Делаем шаг вправо, пропуская одну ячейку.

  8. Ставим метку.

  9. Конец работы.

Задача 1. На ленте машины Поста расположен массив из N меток. Составить программу, действуя по которой машина выяснит, делится ли число на 6. Если да, то после массива через одну пустую секцию поставить метку V . В начале работы каретка обозревает крайнюю слева метку.

Алгоритм

  1. Известно, что вначале каретка обозревает первую слева метку.

  2. Проверяем вторую справа ячейку, если она пустая, то число N на 6 не делится. Переходим на пункт 10.

  3. Проверяем третью справа ячейку, если она пустая, то число N на 6 не делится. Переходим на пункт 10.

  4. Полвеояем четвертую справа ячейку, если она пустая, то число N на 6 не делится. Переходим на пункт 10.

  5. Полвеояем пятую справа ячейку, если она пустая, то число N на 6 не делится. Переходим на пункт 10.

  6. Полвеояем шестую справа ячейку, если она пустая, то число N на 6 не делится. Переходим на пункт 10.

  7. Проверяем седьмую срава ячейку. Если ячейка пустая, значит на ленте расположены подряд 6 меток. Следовательно, число N на 6 делится. Переходим на пункт 8. Если ячейка с меткой, значит на ленте расположено более 6 меток, возвращаемся на пункт 2, считая текущую ячейку первой.

  8. Делаем шаг вправо, пропуская одну ячейку.

  9. Ставим метку.

  10. Конец работы.

Задача 1. Число k представлено на ленте машины Поста k +1 идущими подряд метками. Найти остаток от деления целого неотрицательного числа k на 2, если известно, что каретка находится справа от заданного числа.

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

  1. Находим первую пустую ячейку справа от числа.

  2. Делаем два шага вправо.

  3. Проверяем наличие метки. Если метка есть, значит число больше двух. Переходим на пункт 4. Если метки нет, значит число закончилось. Переходим на пункт 5.

  4. Возвращаемся назад и удаляем подряд две метки. Переходим на пункт 2.

  5. Конец работы.

Задача 1. Дан массив меток. Каретка обозревает первую пустую секцию перед началом массива. Раздвиньте массив ток, чтобы после каждой метки была пустая секция.

Алгоритм

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]