1) 2212
2) 11221
3) 1122
4) 12111
5) 21212
6) 21211
Объяснение:
1)
Команда 1: Вычти 3
Команда 2: Умножь на 2
Нужно из 3 получить 18
1) 3 × 2 = 6 [Команда 2]
2) 6 × 2 = 12 [Команда 2]
3) 12 - 3 = 9 [Команда 1]
4) 9 × 2 = 18 [Команда 2]
2)
Команда 1: Вычти 1
Команда 2: Возведи в квадрат
Нужно из 5 получить 80
1) 5 - 1 = 4 [Команда 1]
2) 4 - 1 = 3 [Команда 1]
3) 3² = 9 [Команда 2]
4) 9² = 81 [Команда 2]
5) 81 - 1 = 80 [Команда 1]
3)
Команда 1: Умножь на 3
Команда 2: Вычти 2
Нужно из 3 получить 23
1) 3 × 3 = 9 [Команда 1]
2) 9 × 3 = 27 [Команда 1]
3) 27 - 2 = 25 [Команда 2]
4) 25 - 2 = 23 [Команда 2]
4)
Команда 1: Прибавь 3
Команда 2: Возведи в квадрат
Нужно из 4 получить 58
1) 4 + 3 = 7 [Команда 1]
2) 7² = 49 [Команда 2]
3) 49 + 3 = 52 [Команда 1]
4) 52 + 3 = 55 [Команда 1]
5) 55 + 3 = 58 [Команда 1]
5)
Команда 1: Вычти 1
Команда 2: Возведи в квадрат
Нужно из 2 получить 64
1) 2² = 4 [Команда 2]
2) 4 - 1 = 3 [Команда 1]
3) 3² = 9 [Команда 2]
4) 9 - 1 = 8 [Команда 1]
5) 8² = 64 [Команда 2]
6)
Команда 1: Раздели на 2
Команда 2: Вычти 1
Нужно из 27 получить 3
1) 27 - 1 = 26 [Команда 2]
2) 26 ÷ 2 = 13 [Команда 1]
3) 13 - 1 = 12 [Команда 2]
4) 12 ÷ 2 = 6 [Команда 1]
5) 6 ÷ 2 = 3 [Команда 1]
n=32;
var
a:array[1..n] of integer;
i,j,k,p,left,right,center:integer;
begin
{ заполнить массив данными }
Randomize;
for i:=1 to n do a[i]:=Random(101);
{ отсортировать массив во возрастанию - пузырьковый метод }
for i := 1 to n-1 do
for j := 1 to n-i do
if a[j] > a[j+1] then
begin k := a[j]; a[j] := a[j+1]; a[j+1] := k end;
{ тысяча поисков случайных чисел }
k:=0;
for j:=1 to 1000 do
begin
p:=Random(101);
{ собственно, двоичный поиск }
left:=1; right:=n;
while left<right do
begin
Inc(k);
if (a[left]=p) or (a[right]=p) then left:=right { нашли }
else begin
center:=(left+right) div 2;
if a[center]=p then left:=right { нашли }
else
if a[center]<p then left:=center+1
else right:=center
end
end
end;
Writeln('Среднее число поисков равно ',k/1000:4:2)
end.
Тестовое решение:
Среднее число поисков равно 4.61