Решение задач на вложенные циклы
Повторение: Как идею алгоритма превратить в программу?
Общая идея:
Задача на вложенные циклы — это примитивная двойная задача, она имеет чётко выраженную «внутреннюю» подзадачу и множество вариантов входных данных, на каждом из которых эту подзадачу надо решить.
- Если внутренняя задача (поиск элемента, вычисление свойств набора данных, преобразование набора и т. п.) решается итеративно, в решении образуются два вложенных цикла:
- Внешний цикл (по всем наборам данных)
- Сформируем очередной набор данных
- Решим подзадачу
- … внутренний цикл
- Обработаем решение
- Внешний цикл (по всем наборам данных)
- Зачастую внешний и внутренний циклы можно отлаживать отдельно:
Взять один фиксированный невырожденный набор данных, реализовать на нём решение подзадачи
- Написать внешний цикл и посмотреть, правильные ли наборы данных он формирует
- Объединить
Ввести N Вывести все простые числа в диапазоне от 2 до N
- Формулировка решения
- Внешний цикл тривиален
Внутренний цикл — подсчёт числа делителей (делится ли на 2…N//2)
- Если таких делителей нет, число целое
Реализовать
№328: Найти N первых простых чисел
В чём разница, и что делать?
решить
№363: Дана строка "s0…sn-1". Преобразовать строку, добавив как можно более короткую подстроку "sn…sm-1" так, чтобы строка "s0…sm-1" стала палиндромом: s0=sm-1, s1=sm-2 и т. д.
Пример: "AbCdC" → "AbCdC" + "bA" = "AbCdCbA"
Внутренний цикл: проверка на палиндром
Внешний цикл: попытаемся решить вручную
Спойлер:
Перевести на Python и организовать цикл, который генерирует все добавочные строки
Решить
Дана строка. Найти все палиндромические подстроки длиной не менее 3 букв.
Пример: qwwewewwq:
qwwewewwq wweweww wew wewew ewe wew
внутренний цикл: проверка подстроки длиной w с позиции i на палиндром
Пример: qwwewewwq 3 4 → "wew"; qwwewewwq 4 2 → ничего
в чём особенность всей задачи?
Спойлер:
Аккуратно посчитать максимальный размер подстроки, начинающейся с позиции i
Решить!
Если будет время/понимание: разбор полной задачи про второй максимум.
Д/З
Решить оставшиеся 7 задач (c 11 по 17) Шестого занятия учебника
Скопировать решения в соответствующие файлы и проверить, что они всё ещё работают!
Имена файлов — от prog_6_11.py до prog_6_17.py
Прислать эти 10 файлов в виде семи приложений к одному письму по адресу <uneexlectures AT cs DOT msu DOT ru>
В поле Subject должно быть «слово» PhilosoPython2022 (другие слова тоже можно ☺)