"Занимательные задачи по информатике", Босова Л.Л., Босова А.Ю., Коломенская Ю.Г.
Задачи о лжецах учат выяснять, кто говорит правду, а кто всегда обманывает. У каждого персонажа есть постоянное правило: правдолюб произносит только истинные высказывания, а лжец — только ложные. Чтобы решить задачу, недостаточно поверить словам или угадать ответ: нужно проверить разные варианты и сопоставить каждую фразу с типом её автора. Такой способ рассуждения помогает замечать противоречия и пригодится в логических задачах и алгоритмах с условиями.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Лжец — персонаж, который всегда произносит ложные высказывания. Это не значит, что он просто иногда ошибается: каждую его фразу в задаче нужно считать неправдой. Поэтому слова лжеца нельзя принимать за верное описание событий, но по ним можно рассуждать.
Правдолюб — персонаж, который всегда говорит правду. Если он что-то утверждает, его слова должны соответствовать действительности. Это правило ограничивает ответы: например, правдолюб не может сказать, что событие произошло, если оно не происходило.
Высказывание — повествовательное предложение, о котором можно решить, истинно оно или ложно. Например, фраза «Боря — лжец» является высказыванием, а вопрос «Кто такой Боря?» — нет. В задачах проверяют именно высказывания, потому что для них можно установить правду или ложь.
Истинность высказывания — соответствие того, что сказано, действительности. Фраза «Аня — правдолюб» истинна, если Аня действительно правдолюб, и ложна в противном случае. При решении важно проверять содержание фразы, а не то, насколько уверенно её произнесли.
Условия о лжецах и правдолюбах задают постоянное правило для каждого персонажа: один всегда говорит правду, другой всегда лжёт. Это правило действует на каждую его фразу, а не меняется в зависимости от темы или удобства. Поэтому в задаче нельзя допускать, чтобы один и тот же человек сначала сказал правду, а затем солгал. Именно постоянство правила позволяет проверять варианты.
Чтобы проверить слова персонажа, сначала предположи, что он правдолюб, а затем — что он лжец. В первом случае его высказывание должно быть истинным, во втором — ложным. Сравни результат с остальными условиями задачи: если предположение заставляет фразу одновременно быть правдой и неправдой, такой вариант невозможен. Так рассуждение опирается на проверку, а не на догадку.
Если персонаж заявляет о собственном типе, например «Я правдолюб», его слова тоже проверяют по общему правилу. При предположении, что говорящий правдолюб, фраза о себе должна быть истинной; при предположении, что он лжец, она должна быть ложной. Если нужное значение не совпадает с предположением, этот тип исключают. Само заявление ещё не доказывает, кем является говорящий.
Высказывание одного персонажа может сообщать о другом, например «Второй — лжец». Здесь важно разделить две проверки: истинно ли утверждение о втором и соответствует ли это значение правилу первого, который произнёс фразу. Нельзя автоматически считать второго лжецом только потому, что о нём так сказали: автор фразы сам может лгать. Проверка каждого персонажа отдельно помогает не перепутать их роли.
Иногда подходят не один, а несколько наборов типов. Тогда нужно перечислить их и проверить каждое высказывание в каждом наборе, не пропуская даже фразу, которая кажется очевидной. Если все фразы согласуются с правилами говорящих, вариант подходит; если хотя бы одна нарушает правило, его отбрасывают. Несколько ответов допустимы, когда условие не позволяет выбрать только один.
| Кто говорит | Правило для его слов | Что нужно проверить |
|---|---|---|
| Правдолюб | Каждое его высказывание истинно. | Соответствует ли сказанное действительности. |
| Лжец | Каждое его высказывание ложно. | Не оказалось ли его утверждение истинным. |
| Высказывание о себе | Действует правило типа самого говорящего. | Совпадает ли истинность фразы с его типом. |
| Высказывание о другом персонаже | Действует правило того, кто произнёс фразу. | Верно ли утверждение о другом и подходит ли его значение говорящему. |
Сначала найди, кто произнёс фразу, а затем определи, какой она должна быть по его правилу. Для высказывания о другом отдельно проверь, верно ли оно описывает этого персонажа. Если хотя бы одна проверка не проходит, весь вариант нужно исключить.
Здесь фраза сообщает о типе самого говорящего. Чтобы ответить, проверим по очереди оба возможных типа. Значение фразы «Я лжец» зависит от того, кем человек на самом деле является.
Предположим, что человек — правдолюб. Тогда его слова должны быть истинными, но фраза «Я лжец» утверждает, что он лжец. Это противоречит предположению, поэтому правдолюбом он быть не может.
Предположим, что человек — лжец. Тогда фраза «Я лжец» оказывается истинной, ведь он действительно лжец. Но лжец должен произносить ложь, поэтому это предположение тоже приводит к противоречию.
Ответ: при таких правилах человек не может быть ни правдолюбом, ни лжецом. Значит, описанная ситуация невозможна; такой результат получается из-за фразы о собственном типе.
Проверяем два варианта для Ани. В каждом из них её фраза должна соответствовать правилу: у правдолюба быть истинной, у лжеца — ложной. Так можно установить, каким должен быть Боря, но не выбирать ответ заранее.
Пусть Аня — правдолюб. Тогда её утверждение «Боря — лжец» истинно, следовательно, Боря действительно лжец. В этом случае правило Ани соблюдено.
Пусть Аня — лжец. Тогда её утверждение должно быть ложным. Значит, Боря не лжец, а правдолюб. Правило Ани также соблюдено.
Ответ: возможны два варианта: Аня — правдолюб, Боря — лжец; или Аня — лжец, Боря — правдолюб. Другие сочетания не подходят, потому что слова Ани в них не соответствовали бы её типу.
Здесь слова каждого связывают типы всех троих. Удобно проверить первый вариант для первого человека, а затем использовать его фразу для определения второго. После этого проверяем слова второго и третьего, чтобы отсеять противоречия.
Пусть первый — правдолюб. Его фраза истинна, значит, второй — лжец. Второй тогда лжёт, поэтому его фраза «Третий — лжец» ложна, и третий — правдолюб.
Но третий говорит, что первый и второй одного типа. Первый — правдолюб, второй — лжец, то есть они разных типов. Фраза третьего ложна, хотя он правдолюб. Получилось противоречие, поэтому первый не может быть правдолюбом.
Теперь пусть первый — лжец. Его фраза о втором ложна, значит, второй — правдолюб. Второй говорит правду, поэтому третий — лжец. Третий утверждает, что первый и второй одного типа; это ложь, так как они разных типов. Правило третьего соблюдено.
Ответ: первый — лжец, второй — правдолюб, третий — лжец. Вариант проверен по всем трём фразам, поэтому противоречия с условием нет.
Ошибка — считать, что лжец иногда может сказать правду. Так думают, если воспринимают лжеца как обычного человека, который просто обманывает время от времени. Но в условии дано постоянное правило: каждое его высказывание ложно. Проверь себя: у предполагаемого лжеца не должно оказаться ни одной истинной фразы.
Ошибка — проверять истинность слов, не учитывая, кто именно их произнёс. Можно решить, что фраза ложная, и забыть, что её сказал правдолюб, которому положено говорить правду. Причина такой ошибки — внимание только к содержанию, а не к автору. Подписывай возле каждой фразы говорящего и проверяй оба факта: что сказано и кто сказал.
Фразу «Я лжец» нельзя принимать за обычное однозначное свидетельство. Кажется, что человек сам сообщил свой тип, но его слова тоже могут быть ложными или истинными согласно правилу. Проверь отдельно предположение о правдолюбе и предположение о лжеце. Если оба приводят к противоречию, ситуация невозможна.
Не останавливайся после первого подходящего варианта. Он может согласоваться с одной фразой, но противоречить другой, которую произнёс персонаж или о которой сообщено в условии. Это случается, когда проверяют только удобную часть задачи. Подставь ответ во все высказывания: правдолюбы должны сказать правду, а лжецы — неправду.
Для решения задач о лжецах нужно уметь отличать повествовательные высказывания от вопросов и команд, а также определять, истинно ли простое утверждение. Эти знания помогают понять, какие фразы вообще можно проверять. Если предложение не сообщает факт, ему нельзя присвоить значение «истина» или «ложь».
Перебор вариантов и проверка условий пригодятся и в других логических задачах, где нужно найти решение без угадывания. Похожий способ используют при составлении алгоритмов с условиями: проверяют ситуацию и выбирают действие в зависимости от результата. Умение исключать противоречивые варианты помогает рассуждать последовательно.
Может ли лжец случайно сказать правду?
Нет. По условию задачи лжец всегда произносит ложные высказывания. Если его фраза оказалась правдой, значит, выбранный вариант с лжецом не подходит.
Как понять, правдолюб перед нами или лжец?
Сравнивай слова персонажа с тем, что известно о ситуации. Если его высказывание истинно, он правдолюб; если ложно — лжец. При нехватке данных проверь оба варианта.
С чего начать задачу, если персонажей несколько?
Запиши, что сказал каждый персонаж, и отметь его возможные типы. Затем разбирай варианты по одному, проверяя каждую фразу по правилу её автора.
Что делать, если подходят два варианта?
Если оба варианта не противоречат ни одному условию, значит, задача допускает оба ответа. Не выбирай один наугад: перечисли все подходящие варианты.
Как проверить ответ, чтобы не пропустить противоречие?
Подставь найденные типы персонажей обратно в задачу. У правдолюбов все фразы должны оказаться истинными, а у лжецов — ложными.
З Задачи о лжецах