На pascal abc net program test; type realarray = array of real; var step:real; a:realarray; i,n,s1,s2,s3,s4:integer; begin write('Введите количество членов последовательности: '); readln(n); step:=1/n; setlength(a,n); a[0]:=0; for i:=1 to n-1 do a[i]:=a[i-1]+step; for i:=0 to n-1 do begin if a[i]<0.25 then s1:=s1+1; if (a[i]>=0.25) and (a[i]<0.5) then s2:=s2+1; if (a[i]>=0.5) and (a[i]<0.75) then s3:=s3+1; if a[i]>=0.75 then s4:=s4+1; end; writeln('На промежутке [0,0.25) - ',s1); writeln('На промежутке [0.25,0.5) - ',s2); writeln('На промежутке [0.5,0.75) - ',s3); writeln('На промежутке [0.75,1) - ',s4); end.
В данном случае наилучшей является стратегия половинного деления. Сначала определяем страницу. Будем делить каждый раз количество страниц, содержащих нужную, пополам. Первый вопрос: "Нужная страница имеет номер больше 40?" Если да, то рассматриваем страницы с 41 по 80, если нет - то страницы с 1 до 40. Второй вопрос для случая, когда номер страницы был больше 40 будет выглядеть так: "Нужная страница имеет номер больше 60?". А если номер страницы был не больше 40, то спрашиваем "Нужная страница имеет номер больше 20?". При такой схеме количество необходимых вопросов будет равно 7 ( 2⁶<80<2⁷).
Найдя нужную страницу по такой же схеме ищем номер слова (от 1 до 50). Поскольку 2⁵<50<2⁶, то потребуется задать 6 вопросов.
7 вопросов для определения номера страницы и 6 для определения номера слова на ней - всего 13 вопросов. Поэтому за 12 вопросов отгадать слово не удастся.
В то же время, если бы можно было пронумеровать все слова от 1 до 4000 (50х80=4000) и задавать вопросы по порядковым номерам слов, то 12 вопросов хватило бы (2¹¹<4000<2¹²)
program test;
type realarray = array of real;
var
step:real;
a:realarray;
i,n,s1,s2,s3,s4:integer;
begin
write('Введите количество членов последовательности: ');
readln(n);
step:=1/n;
setlength(a,n);
a[0]:=0;
for i:=1 to n-1 do a[i]:=a[i-1]+step;
for i:=0 to n-1 do begin
if a[i]<0.25 then s1:=s1+1;
if (a[i]>=0.25) and (a[i]<0.5) then s2:=s2+1;
if (a[i]>=0.5) and (a[i]<0.75) then s3:=s3+1;
if a[i]>=0.75 then s4:=s4+1;
end;
writeln('На промежутке [0,0.25) - ',s1);
writeln('На промежутке [0.25,0.5) - ',s2);
writeln('На промежутке [0.5,0.75) - ',s3);
writeln('На промежутке [0.75,1) - ',s4);
end.
Первый вопрос: "Нужная страница имеет номер больше 40?" Если да, то рассматриваем страницы с 41 по 80, если нет - то страницы с 1 до 40.
Второй вопрос для случая, когда номер страницы был больше 40 будет выглядеть так: "Нужная страница имеет номер больше 60?". А если номер страницы был не больше 40, то спрашиваем "Нужная страница имеет номер больше 20?".
При такой схеме количество необходимых вопросов будет равно 7 ( 2⁶<80<2⁷).
Найдя нужную страницу по такой же схеме ищем номер слова (от 1 до 50).
Поскольку 2⁵<50<2⁶, то потребуется задать 6 вопросов.
7 вопросов для определения номера страницы и 6 для определения номера слова на ней - всего 13 вопросов. Поэтому за 12 вопросов отгадать слово не удастся.
В то же время, если бы можно было пронумеровать все слова от 1 до 4000 (50х80=4000) и задавать вопросы по порядковым номерам слов, то 12 вопросов хватило бы (2¹¹<4000<2¹²)