Статья Автор: Деникина Н.В., Деникин А.В.

Чётность номера и условия

В настоящем сложном задании 8 условия наваливаются кучей в одном предложении:

«Определите, под каким номером стоит последнее слово с чётным номером, которое не начинается с букв К или Н и при этом содержит в своей записи ровно две буквы У».

Тут сразу четыре требования: чётность номера, запрет первой буквы (двух букв), точное количество буквы У, и слово нужно последнее. Формула получится ну очень сложная — и это хорошая новость, потому что искать её не придётся.


Как разбирать такое условие

Разложи предложение на отдельные проверки. Каждое требование — одна строчка, все должны выполниться одновременно:

• номер чётный (или нечётный — смотри условие);
• первая буква не из запрещённых;
• нужное количество вхождений буквы: «ровно», «не менее» или «не более»;
• иногда добавляют запрет на соседство пары букв.

И отдельно — что именно спрашивают. «Последнее» значит: пройти список до конца и запомнить самый большой подходящий номер. «Сколько» значит: просто считать подходящие. Останавливаться на первом найденном нельзя ни в том, ни в другом случае.


Программное решение

Условия цепляются друг за друга: чётность номера зависит от места слова в списке, а место — от всех его букв сразу. Любая попытка вывести формулу разваливается на разбор десятков случаев.

Какую задачу решает код: построить список, пройти его целиком и оставить слова, которые проходят все проверки. Ровно то, что ты делал бы руками, будь у тебя несколько часов.

Номер слова — это i + 1, поэтому чётность проверяется как nomer % 2 == 0. Дальше условия соединяются словом and: первая буква не К и не Н, и букв У ровно две. Слово «последнее» отражено тем, что break в цикле нет: код идёт до конца списка и каждый раз перезаписывает otvet. В переменной останется последний подходящий номер — самый большой.

Почему перебор здесь основной метод, а не запасной: добавить в задание ещё одно условие — это дописать одну проверку в if. Формулу под каждое новое условие пришлось бы выводить заново. Именно поэтому такие задания на экзамене решают кодом, а не на бумаге.



Что вышло

3094

Это и есть ответ на задание из начала тетради. Шаблон универсальный: меняешь буквы в product, длину в repeat и набор проверок в if — и он решает любое задание этого типа.


Все 5-буквенные слова из букв слова ГРОМ записаны по алфавиту и пронумерованы. Под каким номером стоит последнее слово с чётным номером, которое не начинается с буквы Г и содержит ровно две буквы Р? Введите число.


Все 5-буквенные слова из букв К, О, Т записаны по алфавиту и пронумерованы. Сколько слов с нечётными номерами не начинается с буквы К и содержит не более одной буквы О? Введите число.


Все 4-буквенные слова из букв слова МОСТ записаны по алфавиту и пронумерованы. Под каким номером стоит последнее слово с нечётным номером, которое не начинается с буквы М и содержит не менее двух букв О? Введите число.

Печать