logo search
Общие приёмы решения нестандартных задач

Метод шестой: Метод блок-схем

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

Более систематический подход к решению задач "на переливание" заключается в использовании блок-схем. Суть этого метода состоит в следующем. Сначала выделяются операции, которые позволяют нам точно отмерять жидкость. Эти операции называются командами. Затем устанавливается последовательность выполнения выделенных команд. Эта последовательность оформляется в виде схемы. Подобные схемы называются блок-схемами и широко используются в программировании. Составленная блок-схема является программой, выполнение которой может привести нас к решению поставленной задачи. Для этого достаточно отмечать, какие количества жидкости удается получить при работе составленной программы. При этом обычно заполняют отдельную таблицу, в которую заносят количество жидкости в каждом из имеющихся сосудов.

Задача 6. Имеются два сосуда — трехлитровый и пятилитровый. Нужно, пользуясь этими сосудами, получить 1, 2, 3, 4, 5, 6, 7 и 8 литров воды. В нашем распоряжении водопроводный кран и раковина, куда можно выливать воду.

Решение. Перечислим все возможные операции, которые могут быть использованы нами, и введем для них следующие сокращенные обозначения: НБ — наполнить больший сосуд водой из-под крана; НМ — наполнить меньший сосуд водой из-под крана; ОБ — опорожнить больший сосуд, вылив воду в раковину; ОМ — опорожнить меньший сосуд, вылив воду в раковину; Б→М — перелить из большего в меньший, пока больший сосуд не опустеет или меньший сосуд не наполнится; М→Б — перелить из меньшего в больший, пока меньший сосуд не опустеет или больший сосуд не наполнится. Выделим среди перечисленных команд только три: НБ, Б→М, ОМ. Кроме этих трех команд рассмотрим еще две вспомогательные команды: Б = 0 ? — посмотреть, пуст ли больший сосуд; М = З ? — посмотреть, наполнен ли малый сосуд.

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

Договоримся теперь о последовательности выполнения выделенных команд. После Б→М будем выполнять ОМ всякий раз, как меньший сосуд оказывается наполненным, и НБ всякий раз, как больший сосуд будет опорожнен. Последовательность команд изобразим в виде блок-схемы (Рис. 1). Начнем выполнение программы. Будем фиксировать, как меняется количество воды в сосудах, если действовать по приведенной схеме. Результаты оформим в виде таблицы (табл.)

Дальше эта последовательность будет полностью повторяться. Из таблицы видим, что количество воды в обоих сосудах вместе образует следующую последовательность: 0, 5, 2, 7, 4, 1, 6, 3, 0 и т.д. Таким образом, действуя по приведенной схеме, можно отмерить любое количество литров от 1 до 7. Чтобы отмерить еще и 8 литров, надо наполнить оба сосуда.

Задача 7. Среди четырех монет одна фальшивая. Она отличается массой, однако неизвестно, легче она или тяжелее. Масса настоящей монеты 5 г. Как при помощи двух взвешиваний на чашечных весах обнаружить фальшивую монету, если имеется одна гиря массой 5 г? Можно ли при этих условиях опознать, легче фальшивая монета или тяжелее?

Решение. Пусть m1, m2, m3, m4 – массы четырех монет соответственно, Г - масса гири. Оформим решение в виде блок-схемы (см. рис.). Приведенная схема задает программу, осуществление которой позволяет установить фальшивую монету и определить, легче она или тяжелее. Взвешиваниям в блок-схеме соответствуют прямоугольники - операторы условного перехода. В схеме выделены первое и второе взвешивания горизонтальными линиями.

Прокомментируем для примера ход рассуждений, двигаясь лишь по одной ветви блок-схемы. Итак, первое взвешивание: пусть m1 + m2 < m3 + + Г. Это означает, что фальшивая монета находится среди первых трех монет, и, следовательно, четвертая монета истинная, то есть m4 = 5.

Второе взвешивание: пусть m1+m3 > m4+Г. Тогда фальшивая монета тяжелее (так как m4+Г - вес двух истинных монет) и это либо первая, либо третья монета. Но показания весов при первом взвешивании (m1+m2 < m3+Г) позволяют нам сделать вывод, что более тяжелой является третья монета. Если бы показания весов при втором взвешивании были противоположными, то фальшивая монета должна бы быть более легкой, а, стало быть, это была первая монета. Наконец, если при втором взвешивании весы будут в равновесии, то и третья и первая монеты не могут быть фальшивыми. Следовательно, фальшивой является вторая монета и вес ее меньше 5 грамм.