В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
josen337
josen337
16.02.2023 07:46 •  Информатика

дано 8 различных чисел Составьте алгоритм умножающий только положительные из них НЕ ОБЬЯЗАТЕЛЬНО РЕШЕНИЕ. ОБЬЯСНИТЕ ОСТАЛЬНОЕ ПОПРОБУЮ СДЕЛАТЬ САМА

Показать ответ
Ответ:
ivinaKiyn
ivinaKiyn
16.10.2022 11:42

Самая оптимальная стратегия угадывания - дихотомия, то есть деление отрезка пополам и задавание вопроса больше? (или меньше?)

Например, загадано 50

Последовательность

32   64/2            больше

48   (32+64)/2   больше

56   (48+64)/2   меньше

52   (48+56)/2   меньше

50   (48+52)/2   попал

 

Теперь о задаче. Вопрос очень некорректный, если бы он звучал, как сколько попыток нужно сделать, чтобы угадать? , то решение простое

64 = 2^6, поэтому нужно 6 попыток 6 = 110b, значит 3 бит достаточно, чтобы в них разместить это количество попыток.

НО в задаче вопрос-то другой! Потому что в процессе отгадывания на каждом шаге нужно знать 1. Концы отрезка, 2. ответ

Концы это 6 бит и 6 бит +ответ 1 бит, итого 13 бит на шаг *6 = 78 бит. Можно ещё сократить немного, так как в последующем вопросе используется информация из предыдущего(один из концов интервала).

Уточни, что имеется в виду под фразой "какое количество информации", иначе задача неопределена и допускает многочисленные толкования.

0,0(0 оценок)
Ответ:
Var a:array of integer;
n,i,p,i1,i2: integer;
begin
write('n = ');
readln(n);
SetLength(a,n);
Randomize;
a[0]:=random(50)+100;
write(a[0]:4);
for i:=1 to n-1 do
 begin
 a[i]:=a[i-1]-random(11);
 write(a[i]:4);
 end;
writeln;
p:=a[0]-a[n-1];
writeln('p = ',p);
i1:=0; i2:=n-1; 
repeat
i:=(i1+i2) div 2;
if a[i]>p then i1:=i1+1;
if a[i]<p then i2:=i2-1;
until (a[i]=p)or(i1>=i2);
if a[i]=p 
 then writeln('i = ',i) 
 else writeln('Искомого элемента нет');
end.

Пример:
n = 20
 142 139 135 129 120 120 120 113 107 106 104  99  89  88  81  72  71  70  60  54
p = 88
i = 13
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота