Вариант no1
в языке запросов поискового сервера для обозначения логической операции «или» используется
символ «i», а для логической операции «и» - символ «& ». в таблице запросы и
количество найденных по ним страниц некоторого сегмента сети интернет
найдено страниц (в тысячах)
запрос
польша
4200
польша & украина
1230
украина
3900
какое количество страниц (в тысячах) будет найдено по запросу польша украина?
считается, что все запросы выполнялись практически одновремено, так что набор страниц,
содержащих все искомые слова, не изменялся за премя выполнения запросов
program cyclist2;
const
Am1: array [0..1] of Integer = (50, 10); // график движения 1-го
Av1: array [0..1] of Real = (0.2, 0); // скорость 1-го (0 - стоит на месте, отдыхает, 12 км/ч = 12/60 = 0.2 км/мин)
Am2: array [0..1] of Integer = (20, 10); // график движения 2-го
Av2: array [0..1] of Real = (0.3, 0); // скорость 2-го (0 - стоит на месте, отдыхает, 18 км/ч = 18/60 = 0.3 км/мин)
var
m, m1, m2, p1, p2: Integer;
n, n1, n2: Real;
begin
Write ('Введите N: ');
ReadLn (n);
WriteLn;
m := 0; // счетчик минут
p1 := 0; // текущий график 1-го
p2 := 0; // текущий график 2-го
m1 := Am1 [p1]; // начальное значение счетчика минут в графике 1-го
m2 := Am2 [p2]; // начальное значение счетчика минут в графике 2-го
n1 := 0; // пройденное рассстояние 1-го
n2 := 0; // пройденное рассстояние 2-го
while (n1 + n2) < n - 0.001 do begin // проверка на истинность встреци. 0.001 для корректировки погрешность вычислений с Real
Inc (m); // следующая минута
Dec (m1); // уменьшаем длительность графика 1-го
n1 := n1 + Av1 [p1]; // расчет пройденного расстояния
if m1 <= 0 then begin // если период в графике закончился, то
if p1 = 0 then p1 := 1 else p1 := 0; // изменяем период
m1 := Am1 [p1]; // устанавливаем длительность графика
end;
Dec (m2); // то же делаем для 2-го
n2 := n2 + Av2 [p2];
if m2 <= 0 then begin
if p2 = 0 then p2 := 1 else p2 := 0;
m2 := Am2 [p2];
end;
// WriteLn (m :5, n1 :5 :1, n2 :5 :1, n1 + n2 :5 :1); // это для отладки, чтобы посмотреть движение по минутам - раскомментировать
end;
WriteLn ('Через ', m, ' минут велосипедисты встретятся.');
ReadLn;
end.
Объяснение: комментарии в программе
нужно действовать от обратного
возьмём число 18 и попробуем получить из него число 2. Так как мы начинаем алгоритм с конца то и действия превратятся в противоположные: -1 станет 1, *2 станет /2.
Разделим 18 на 2 = 9 (команда 2)
Прибавим 1 к 9 = 10 (команда 1)
Разделим 10 на 2 = 5 (команда 2)
Прибавим 1 к 5 = 6 (команда 1)
Разделим 6 на 2 = 3 (команда 2)
Получили порядок команд: 21212, но так как мы действовали от обратного нужно реверсировать порядок команд (записать команды в обратном порядке). В нашем случае изначальный порядок равен реверсированному (21212 = 21212), поэтому в этом нет необходимости.
В итоге получен алгоритм: 21212