Идея метода:
описать последовательность выполнения операций,
определить порядок их выполнения и фиксировать состояния.
Здесь приводится два примера решений задачи на переливание и на
взвешивание. Примеры решения задач.
Задача 3.
Имеются два сосуда — трехлитровый и пятилитровый. Нужно, пользуясь
этими сосудами, получить 1, 2, 3, 4, 5, 6, 7 и 8 литров воды. В нашем
распоряжении водопроводный кран и раковина, куда можно выливать воду.
Решение.
Перечислим все возможные операции, которые могут быть использованы
нами, и введем для них следующие сокращенные обозначения: НБ — наполнить
больший сосуд водой из-под крана; НМ — наполнить меньший сосуд водой из-
под крана; ОБ — опорожнить больший сосуд, вылив воду в раковину; ОМ —
опорожнить меньший сосуд, вылив воду в раковину; Б→М — перелить из
большего в меньший, пока больший сосуд не опустеет или меньший сосуд не
наполнится; М→Б — перелить из меньшего в больший, пока меньший сосуд не
опустеет или больший сосуд не наполнится. Выделим среди перечисленных
команд только три: НБ, Б→М, ОМ. Кроме этих трех команд рассмотрим еще две
вспомогательные команды: Б = 0 ? — посмотреть, пуст ли больший сосуд; М = З
? — посмотреть, наполнен ли малый сосуд.
В зависимости от результатов этого осмотра мы переходим к выполнению
следующей команды по одному из двух ключей - "да" или "нет". Такие команды
в программировании принято называть командами "условного перехода" и
изображать в блок-схемах в виде ромбика с двумя ключами-выходами.
Договоримся теперь о последовательности выполнения выделенных
команд. После Б→М будем выполнять ОМ всякий раз, как меньший сосуд
оказывается наполненным, и НБ всякий раз, как больший сосуд будет
опорожнен. Последовательность команд изобразим в виде блок-схемы (Рис. 1).
Начнем выполнение программы. Будем фиксировать, как меняется количество
воды в сосудах, если действовать по приведенной схеме. Результаты оформим в
виде таблицы (табл.).
Б
0
5
2
2
0
5
4
4
1
1
0
5
3
3
0
0
М
0
0
3
0
2
2
3
0
3
0
1
1
3
0
3
0
Дальше эта последовательность будет полностью повторяться. Из таблицы
видим, что количество воды в обоих сосудах вместе образует следующую
последовательность: 0, 5, 2, 7, 4, 1, 6, 3, 0 и т.д. Таким образом, действуя по
приведенной схеме, можно отмерить любое количество литров от 1 до 7. Чтобы
отмерить еще и 8 литров, надо наполнить оба сосуда.
Задача 4.
Среди четырех монет одна фальшивая. Она отличается массой, однако
неизвестно, легче она или тяжелее. Масса настоящей монеты 5 г. Как при
помощи двух взвешиваний на чашечных весах обнаружить фальшивую монету,
если имеется одна гиря массой 5 г? Можно ли при этих условиях опознать, легче
фальшивая монета или тяжелее?
Решение.
Пусть m1, m2, m3, m4 – массы четырех монет соответственно, Г - масса
гири. Оформим решение в виде блок-схемы (см.рис.). Приведенная схема задает
программу, осуществление которой позволяет установить фальшивую монету и
определить, легче она или тяжелее. Взвешиваниям в блок-схеме соответствуют
прямоугольники - операторы условного перехода. В схеме выделены первое и
второе взвешивания горизонтальными линиями.
Прокомментируем для примера ход рассуждений, двигаясь лишь по одной
ветви блок-схемы. Итак, первое взвешивание: пусть m1 + m2 < m3 + + Г. Это
означает, что фальшивая монета находится среди первых трех монет, и,
следовательно, четвертая монета истинная, то есть m4 = 5.
Второе взвешивание: пусть m1+m3 > m4+Г. Тогда фальшивая монета
тяжелее (так как m4+Г - вес двух истинных монет) и это либо первая, либо
третья монета. Но показания весов при первом взвешивании (m1+m2 < m3+Г)
позволяют нам сделать вывод, что более тяжелой является третья монета. Если
бы показания весов при втором взвешивании были противоположными, то
фальшивая монета должна бы быть более легкой, а, стало быть, это была первая
монета. Наконец, если при втором взвешивании весы будут в равновесии, то и
третья и первая монеты не могут быть фальшивыми. Следовательно, фальшивой
является вторая монета и вес ее меньше 5 грамм.
Достарыңызбен бөлісу: |