1 задача:
Отгадать целое число, которое "загадал" компьютер
в определенном диапазоне.
Описание переменных:
a – число, "загаданное" компьютером;
b – очередное число, вводимое пользователем.
Алгоритм решения задачи:
1.
Программа генерирует псевдослучайное число,
которое записывается в переменную a.
2.
Цикл: пока число a не совпадет с числом b, предлагается
ввести очередное число. При этом, если b > a, то на экран будет выдаваться
сообщение "меньше". Иначе появится сообщение "больше",
иначе сообщение "число угадано".
Не трудно понять, что если b не больше и не меньше a, то
значит оно равно a. В таком случае логическое выражение при while вернет false,
и цикл прервется.
Программа на языке Паскаль:
var
a,b: integer;
begin
randomize;
a := random(100);
while a <> b do begin
write('Ваше число: ');
readln(b);
if b > a then
writeln('меньше')
else
if b < a then
writeln('больше')
else
writeln(' число угадано ');
end;
readln
end.
Примечания:
ДЗ.Если делить каждый оставшийся диапазон пополам, то
понадобится не более…?
2 задача:
Источник Ханойская башня — Википедия
В одном из
буддийских монастырей монахи уже тысячу лет занимаются перекладыванием колец.
Они располагают тремя пирамидами, на которых надеты кольца разных размеров.
В начальном состоянии 64 кольца были надеты на первую
пирамиду и упорядочены по размеру. Монахи должны переложить все кольца с первой
пирамиды на вторую, выполняя единственное условие — кольцо нельзя положить на
кольцо меньшего размера. При перекладывании можно использовать все три
пирамиды. Монахи перекладывают одно кольцо за одну секунду. Как только они
закончат свою работу, наступит конец света.
Беспокоиться о близком конце света не стоит. Задача
эта не под силу и современным компьютерам. Число ходов в ней равно 264, а это,
как известно, большое число, и компьютер, работающий в сотню миллионов раз
быстрее монахов, не справится с этой задачей в ближайшие тысячелетия.
Эта древняя легенда породила
задачу о Ханойской башне: переместить m
дисков с одного из трех стержней на другой, соблюдая «законы Брамы».
1. диски можно перемещать
с одного стержня на другой только по одному;
2. нельзя класть больший диск на меньший.
Когда все 64 диска будут перенесены с одного стержня на другой?(, и башня, и
храмы, и жрецы-брамины превратятся в прах, и наступит конец света.)
Назовем стержни левым
(left), средним (middle) и правым (right). Задача состоит в переносе m дисков
с левого стержня на правый.
Задача может быть
решена одним перемещением только для одного (m = 1) диска. В общем случае
потребуется 2m-1 перемещений.
Суть ее в том, что есть три столбца, на левом из которых
расположена пирамидка из дисков. Нужно переставить диски на правый столбец
таким образом, чтобы образовалась такая же пирамидка, при этом можно
использовать вспомогательный средний столбец, но нельзя класть диск большего
размера на меньший в процессе переноса.
{ Переместить с x на y }
procedure replace(k:integer;x,y,z:char);
begin
if k=1 then
writeln(x,' => ', y)
else
begin
replace(k-1,x,z,y);
writeln(x, ' => ', y);
replace(k-1, z,y,x);
end;
end;
var
n:integer;
begin
writeln('Введите
число дисков в крайнем столбце');
readln(n);
writeln('Столбцы: a, b, c');
replace(n,'a','c','b');
end.
|